1、java 中 LocalDate
定制软件类型的数据在 定制软件上进行测试时,以json
定制软件格式输入时格式为2018-07-09
,定制软件需要特别注意的是,07和09是两位数字,不是一位数字。
2、如果日期是 类型,那么不论是前台传String格式日期给后台,还是后台返回格式化传给前端的日期,JacksonAutoConfiguration会自动处理。
3、如果日期是类型,那么前端到后端、后端返回给前端均需要我们进行处理。因为下面yml中的配置不适用于Java 8日期类型,例如LocalDate和LocalDateTime,它只使用于Date或DateTime类型的字段。
- #日期格式化
- spring:
- jackson:
- date-format: yyyy-MM-dd HH:mm:ss
解决方案:增加LocalDateTimeConfig配置类
- /**
- * LocalDateTime全局格式
- */
- @Configuration
- public class LocalDateTimeGlobalConfig {
- private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
-
- /**
- * 配置LocalDateTime类型序列化与反序列化
- */
- @Bean
- public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
- /*return new Jackson2ObjectMapperBuilderCustomizer() {
- @Override
- public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
- jacksonObjectMapperBuilder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
- jacksonObjectMapperBuilder.deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
- }
- };*/
- //这种方式等同于上边
- return builder -> {
- builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
- builder.deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
- };
- }
- }
【注】
1、也可以用转换器来解决该问题。
参考文章:
2、 Date和LocalDateTime均可以使用的解决方案(我认为这种用处不大),参考文章:
3、get请求获取LocalDateTime的方式与Date一样,都是使用注解:
- @GetMapping("date")
- public Object date(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime date) {
- return date;
- }
-
- @GetMapping("date2")
- public Object date(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
- return date;
- }
4、 解决的原理关键在于JacksonAutoConfiguration类,
原理分析可以参考以下文章: