1、java 中 LocalDate 类型的数据在 swagger 上进行测试时,以json 格式输入时格式为2018-07-09,需要特别注意的是,07和09是两位数字,不是一位数字。

2、如果日期是 LocalDate 类型,那么不论是前台传String格式日期给后台,还是后台返回格式化传给前端的日期,JacksonAutoConfiguration会自动处理。

3、如果日期是LocalDateTime类型,那么前端到后端、后端返回给前端均需要我们进行处理。因为下面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、也可以用转换器来解决该问题。

     参考文章:SpringBoot中对LocalDateTime进行格式化并解析_流烟默的博客-CSDN博客_localdatetime格式化 yyyymmdd注解

SpringBoot 日期转换错误JSON parse error: Cannot deserialize value of type `java.time.LocalDateTime`_Jack魏的博客-CSDN博客

2、 Date和LocalDateTime均可以使用的解决方案(我认为这种用处不大),参考文章:

SpringBoot做全局的日期格式化LocalDateTime_梁可爱的博客-CSDN博客

SpringBoot中对LocalDateTime进行格式化并解析_流烟默的博客-CSDN博客_localdatetime格式化 yyyymmdd注解

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类,

 原理分析可以参考以下文章:

Spring Boot2自动化配置及使用jackson进行json解析_洛阳桥边的博客-CSDN博客

https://www.jianshu.com/p/560e9b114c29

LocalDateTime格式化处理及全局配置_擦肩而过的博客-CSDN博客_localdatetime 格式化

在Spring Boot中格式化JSON日期_盲目的拾荒者的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐