Когда я использую интерфейс org.springframework.format.Printer? - PullRequest
0 голосов
/ 26 декабря 2018

Когда я использую spring-mvc, я всегда использую spring formatter для форматирования строки в Java Bean.Итак, я реализую интерфейс org.springframework.format.Formatter.
Несмотря на то, что я реализую два метода (print(), parse()), метод print никогда не использовался.Поскольку я просто использую метод parse() для форматирования String в Java Bean и никогда не форматирую Java Bean в String.
Итак, мой вопрос: в какой ситуации будет вызываться print()?Или когда мне нужно отформатировать Java Bean в String.

1 Ответ

0 голосов
/ 27 декабря 2018

Форматтеры могут использоваться для анализа и печати Даты , Метки времени и общие числовые данные .

Это означает, что вы ужеуказал, что мы можем настроить способ обработки синтаксического анализа для определенного типа, переопределив метод parse () .

Это также означает, что мы можем обеспечить настраиваемое поведение печати с помощьюпереопределение print () метода.

Итак, каков вариант использования печати? Давайте приведем пример.

Предположим, у вас естьтип серийного номера, состоящий из 4 сегментов - например, 1111-2222-3333-4444.

public class SerialNumber {

  private int segment1;
  private int segment2;
  private int segment3;
  private int segment4;

  //Some getters and setters;

}

Теперь мы реализуем класс Formatter, который может анализировать ввод, как показано выше.Ради краткости я буду избегать блоков try-catch и логики проверки:

public class SerialNumberFormatter implements Formatter {

  public SerialNumber parse(String input, Locale locale) {

     //Some code here to validate input

     //Split the input into segments
     String[] result = speech.split("-");

     return new SerialNumber(Integer.parseInt(result[0],
                             Integer.parseInt(result[1],
                             Integer.parseInt(result[2],
                             Integer.parseInt(result[3])

  }

}

Итак, таким образом нам удалось проанализировать серийный номер.Но мы уже знали это. Теперь предположим, что мы хотели бы показать серийный номер, хранящийся в нашей БД, конечному пользователю в следующем формате "SN: 1111-2222-3333-4444". Нам нужно как-то напечатать объект,Эта логика может быть реализована внутри метода print ().

Завершение нашего класса Formatter:

public class SerialNumberFormatter implements Formatter {

  public SerialNumber parse(String input, Locale locale) {

     //Some code here to validate input

     //Split the input into segments
     String[] result = speech.split("-");

     return new SerialNumber(Integer.parseInt(result[0],
                             Integer.parseInt(result[1],
                             Integer.parseInt(result[2],
                             Integer.parseInt(result[3])

  }
  public String print(SerialNumber sn, Locale locale) {

     //Some code here to validate the sn

     return String.format("SN: %d-%d-&d-%d", sn.getSegment1,
                                      sn.getSegment2,
                                      sn.getSegment3,
                                      sn.getSegment4)
  }

}

Подводя итог, Formatter позволяет нам инкапсулировать логику, связанную ссинтаксический анализ и печать, которые в противном случае необходимо было бы кодировать в бизнес или сервисный уровень.

Помните, что Formatter также может состоять из классов Parser и Printer.Таким образом, метод print () может содержать логику печати гораздо более сложную, чем просто создание строки.Он может инкапсулировать логику для форматирования POJO и записи его в файл.Он также может возвращать JSON или XML в качестве вывода.

В основном это абстракция, которая позволяет отделить логику форматирования от остальной части нашего кода.

Интерфейс форматера такжеосновная часть Spring Framework.Вы можете реализовать собственные средства форматирования, а затем зарегистрировать их в каркасе для различных задач. Вы можете взглянуть на эту статью Baeldung: https://www.baeldung.com/thymeleaf-in-spring-mvc

В Разделе 8 вы оцените, как работает Formatter.внедрить, а затем зарегистрировать в Spring MVC для преобразования и отображения данных во внешнем интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...