Spring Boot 启动时如果发现 ApplicationContext 中某个 Bean 的类继承了 org.springframework.core.convert.converter.Converter
,则会自动的把它注册为 Converter。
例如前端传一个字符串格式的日期,Controller 中想自动转换为 java.time.LocalDate 对象,像下面这样做就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package com.xtuer.converter;
import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component;
import java.time.LocalDate; import java.time.format.DateTimeFormatter;
@Component public class DateConverter implements Converter<String, LocalDate> { @Override public LocalDate convert(String date) { return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); } }
|
测试用例
Controller 中添加下面的方法:
1 2 3 4 5 6
| @GetMapping("/api/string2date") @ResponseBody public String string2date(@RequestParam LocalDate date) { System.out.println(date); return "OK"; }
|
浏览器里访问 http://localhost:8080/api/string2date?date=2019-08-19,查看控制台输出。
与 ConfigurationProperties 一起使用
ConfigurationProperties 可以把 application.properties 中的配置生成对象,想要 Converter 与 ConfigurationProperties 一起使用的话,需要在 Converter 上增加注解 @ConfigurationPropertiesBinding
:
1 2 3 4 5 6 7 8 9
| ... @Component @ConfigurationPropertiesBinding public class DateConverter implements Converter<String, LocalDate> { @Override public LocalDate convert(String date) { return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")); } }
|