当我使用spring-mvc时,我总是使用spring格式化程序将字符串格式化为Java Bean。因此,我实现了org.springframework.format.Formatter
接口。
尽管我实现了两种方法(print()
,parse()
),但从未使用过print
方法。因为我只使用parse()
方法将字符串格式化为Java Bean,而从未将Java Bean格式化为String。
因此,我的问题是,print()
会在什么情况下被调用?或者,当我需要将Java Bean格式化为String时。
答案 0 :(得分:1)
格式化程序可用于解析和打印日期,时间戳和通用数字数据。
这意味着,正如您已经指出的,我们可以通过覆盖 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类,该类可以解析如上所示的输入。为简便起见,我将避免尝试捕获块和验证逻辑:
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 允许我们封装与解析和打印有关的逻辑,否则就需要将其编码到业务或服务层中。
请记住,格式化程序也可以由解析器和打印机类组成。因此, print()方法可能包含的打印逻辑要比仅构建String复杂得多。它可以封装逻辑以格式化POJO并将其写入文件。它还可以返回JSON或XML作为输出。
主要将其作为一种抽象,使我们能够将格式化逻辑与其余代码分离。
Formatter接口也是Spring Framework的核心部分。您可以实现自定义格式化程序,然后将其注册到框架中以完成不同的任务。您可以看一下Baeldung的文章:https://www.baeldung.com/thymeleaf-in-spring-mvc
在第8节中,您将欣赏格式化器的实现方式,然后将其注册到Spring MVC中以在前端转换和显示数据。