当我使用spring时,我总是使用spring格式化程序将字符串格式化为Java。因此,我实现了org.springframework.format.Formatter接口。
尽管我实现了两个方法(print(),parse()),但从未使用过print方法。因为我只使用parse()方法将字符串格式化为Java,而从不将Java格式化为String。
那么,我的问题是,print()将在什么情况下被调用?或者当我需要格式化Java来字符串时。
发布于 2018-12-27 02:25:22
Formatters可用于解析和打印日期、时间戳和通用数字数据。
这意味着,正如您已经指出的,我们可以通过重写parse()方法来定制特定类型的解析处理方式。
还意味着我们可以通过重写 print () 方法来提供自定义打印行为。
,那么,打印的用例是什么?,让我们举个例子。
假设您的序列号类型由4段-e.g.,1111-2222-3333-4444组成。
public class SerialNumber {
private int segment1;
private int segment2;
private int segment3;
private int segment4;
//Some getters and setters;
}现在,我们将实现一个格式化类,它可以像上面所示的那样解析一个输入。为了简洁起见,我将避免尝试捕获块和验证逻辑:
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“的格式向最终用户显示一个存储在DB中的。我们需要以某种方式打印对象。该逻辑可以在print()方法中实现。
完成格式化程序类:
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)
}
}总之,格式化程序允许我们封装与解析和打印相关的逻辑,否则需要将其编码到业务或服务层。
请记住,格式化程序也可以由解析器和打印机类组成。因此,print()方法可能包含比构建字符串复杂得多的打印逻辑。它可以封装逻辑以格式化POJO并将其写入文件。它还可以返回一个JSON或XML作为输出。
把它主要看作是一种抽象,它允许我们将格式化逻辑与代码的其余部分分离开来。
格式化程序接口也是Spring的核心部分。您可以实现自定义Formatters,然后将它们注册到用于不同任务的框架中。您可以查看一下Baeldung的文章:https://www.baeldung.com/thymeleaf-in-spring-mvc
在第8节中,您将了解格式化程序是如何实现的,然后注册到Spring以在前端转换和显示数据。
https://stackoverflow.com/questions/53930616
复制相似问题