SpringBoot全局配置LocalDate/LocalTime/LocalDateTime的序列化和反序列化

张开发
2026/4/9 4:54:15 15 分钟阅读

分享文章

SpringBoot全局配置LocalDate/LocalTime/LocalDateTime的序列化和反序列化
如何优雅的配置SpringBoot web starter自动注入了jackson且包含datetype-jsr310依赖支持LocalDate/LocalTime/LocalDateTime的序列化和反序列化不过还需要我们手动配置下才生效。建议通过注入Jackson2ObjectMapperBuilderCustomizer来优雅的实现。不要手动去创建ObjectMapper这样会覆盖很多默认配置默认的配置挺好的如果默认不满足需求通过Jackson2ObjectMapperBuilderCustomizer来配置packagecom.example.demo.config;importcom.fasterxml.jackson.datatype.jsr310.JavaTimeModule;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;importcom.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;importorg.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;importorg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;importjava.time.format.DateTimeFormatter;/** * 全局配置LocalDate/LocalTime/LocalDateTime的序列化和反序列化 * * see JacksonAutoConfiguration */ConfigurationpublicclassJacksonConfiguration{privatestaticfinalDateTimeFormatterFORMAT_DATEDateTimeFormatter.ofPattern(yyyy-MM-dd);privatestaticfinalDateTimeFormatterFORMAT_TIMEDateTimeFormatter.ofPattern(HH:mm:ss);privatestaticfinalDateTimeFormatterFORMAT_DATE_TIMEDateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss);BeanpublicJackson2ObjectMapperBuilderCustomizerjackson2ObjectMapperBuilderCustomizer(){returnjacksonObjectMapperBuilder-{JavaTimeModulejavaTimeModulenewJavaTimeModule();javaTimeModule.addSerializer(LocalDate.class,newLocalDateSerializer(FORMAT_DATE));javaTimeModule.addDeserializer(LocalDate.class,newLocalDateDeserializer(FORMAT_DATE));javaTimeModule.addSerializer(LocalTime.class,newLocalTimeSerializer(FORMAT_TIME));javaTimeModule.addDeserializer(LocalTime.class,newLocalTimeDeserializer(FORMAT_TIME));javaTimeModule.addSerializer(LocalDateTime.class,newLocalDateTimeSerializer(FORMAT_DATE_TIME));javaTimeModule.addDeserializer(LocalDateTime.class,newLocalDateTimeDeserializer(FORMAT_DATE_TIME));jacksonObjectMapperBuilder.modules(javaTimeModule);};}}最后建议新项目彻底去除 java.util.Date 或 java.sql.Date 相关日期类的使用全面使用LocalDate/LocalTime/LocalDateTime

更多文章