使用场景
在Spring Boot应用中,Formatter接口用于自定义数据的格式化,比如将日期对象格式化为字符串,或者将字符串解析回日期对象。这在处理HTTP请求和响应时特别有用,尤其是在展示给用户或从用户接收特定格式的数据时。下面通过一个实际工作场景来展示如何创建自定义Formatter并应用它。
- 与转换器区别:
Formatter就像Converter一样,也是将一种类型转换成另一种类型。但是,Formatter的源类型必须是一个String,而Converter则适用于任意的源类型。Formatter更适合Web层,而Converter则可以用在任意层中。
代码示例
创建Formatter
/**
* 自定义日期格式化
*/
public class CustomLocalDateFormatter implements Formatter<LocalDate> {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public LocalDate parse(String text, Locale locale) throws ParseException {
return LocalDate.parse(text, formatter);
}
@Override
public String print(LocalDate date, Locale locale) {
return formatter.format(date);
}
}
注册
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new CustomLocalDateFormatter());
}
}
编写接口
@RequestMapping("/mvc")
@RestController
public class CustomConverterController {
@GetMapping("/formateDate")
public String formateDate(@RequestParam LocalDate date) {
return "Formatted Date: " + date;
}
}
测试
浏览器输入:http://localhost:9000/mvc/formateDate?date=2023-12-23
输出:Formatted Date: 2023-12-23
如果输入的是错误格式:http://localhost:9000/mvc/formateDate?date=2023-12-45
会有400提示,说明转换失败!