首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候使用org.springframework.format.Printer接口?

什么时候使用org.springframework.format.Printer接口?
EN

Stack Overflow用户
提问于 2018-12-26 10:16:46
回答 1查看 245关注 0票数 1

当我使用spring时,我总是使用spring格式化程序将字符串格式化为Java。因此,我实现了org.springframework.format.Formatter接口。

尽管我实现了两个方法(print()parse()),但从未使用过print方法。因为我只使用parse()方法将字符串格式化为Java,而从不将Java格式化为String。

那么,我的问题是,print()将在什么情况下被调用?或者当我需要格式化Java来字符串时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-27 02:25:22

Formatters可用于解析和打印日期、时间戳和通用数字数据

这意味着,正如您已经指出的,我们可以通过重写parse()方法来定制特定类型的解析处理方式。

还意味着我们可以通过重写 print () 方法来提供自定义打印行为。

,那么,打印的用例是什么?,让我们举个例子。

假设您的序列号类型由4段-e.g.,1111-2222-3333-4444组成。

代码语言:javascript
运行
复制
public class SerialNumber {

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

  //Some getters and setters;

}

现在,我们将实现一个格式化类,它可以像上面所示的那样解析一个输入。为了简洁起见,我将避免尝试捕获块和验证逻辑:

代码语言:javascript
运行
复制
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()方法中实现。

完成格式化程序类:

代码语言:javascript
运行
复制
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以在前端转换和显示数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53930616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档