Форматтеры могут использоваться для анализа и печати Даты , Метки времени и общие числовые данные .
Это означает, что вы ужеуказал, что мы можем настроить способ обработки синтаксического анализа для определенного типа, переопределив метод 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 для преобразования и отображения данных во внешнем интерфейсе.