如何使用Jackson开启对LocalDate的JSR310序列化支持?
解决Jackson JSR310模块不生效问题
步骤1:检查Jackson依赖版本一致性
- 确保所有Jackson相关依赖(
jackson-core、jackson-databind、jackson-annotations)的版本和你引入的jackson-datatype-jsr310版本完全一致,你当前用的是2.13.0,需保持所有组件均为该版本,版本冲突会导致模块不生效 - 可执行
mvn dependency:tree命令排查是否存在隐式引入的其他版本Jackson包,排除冲突项
步骤2:手动注册JSR310模块(普通Java项目)
仅引入依赖不会自动生效,需要在初始化ObjectMapper时主动注册JavaTimeModule:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.databind.SerializationFeature; // 初始化时注册模块 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); // 可选:关闭日期序列化为时间戳的默认配置 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
步骤3:Spring Boot项目适配
Spring Boot 2.x+默认已自动集成该模块,如果你手动覆盖了默认Jackson版本,可通过以下两种方式配置:
方式1:修改配置文件
在application.yml中添加配置:
spring: jackson: serialization: write-dates-as-timestamps: false
方式2:自定义ObjectMapper Bean
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return mapper; } }
注意:如果你项目中使用自定义的JSON工具类,手动new了
ObjectMapper实例,需要给该实例也注册JavaTimeModule,Spring容器中的配置不会自动作用于你手动创建的实例
额外排查项
- 检查
jackson-datatype-jsr310的依赖scope是否为compile,如果设置为test或者provided会导致运行时找不到类 - 刷新Maven依赖后重启项目,确认依赖已经成功导入到项目运行时环境中
内容的提问来源于stack exchange,提问作者noumenal
相关产品推荐
相关产品推荐

