Spring Boot从2.4.x升级至2.5.x后Jackson模块未注册LocalDate反序列化报错
Spring Boot 2.5.x 升级后LocalDate序列化报错根因分析
你遇到的报错是Spring Boot 2.5.x版本依赖的Jackson基线版本升级+自动配置逻辑调整共同导致的,具体原因如下:
报错原文:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDate` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling
核心变更点
- Spring Boot 2.5.x将Jackson的基线版本从2.4.x对应的2.11.x升级到了2.12.x,Jackson 2.12版本开始移除了对Java 8时间类型的默认内置支持,必须显式注册
jackson-datatype-jsr310模块才能正常序列化/反序列化LocalDate、LocalDateTime等java.time包下的类型。 - Spring Boot 2.5.x调整了Jackson自动配置的模块注册逻辑:只有Spring容器自动管理的
ObjectMapper实例,才会默认扫描类路径下的Jackson模块并完成自动注册。
常见触发场景
- 代码中直接手动实例化
ObjectMapper(比如ObjectMapper mapper = new ObjectMapper();),而非注入Spring自动配置的ObjectMapper实例:手动创建的实例不会触发Spring的模块自动注册逻辑,在Jackson 2.12版本下就会报错。 - 自定义
ObjectMapperBean时没有使用Jackson2ObjectMapperBuilder构建:如果你通过@Bean注解手动声明了ObjectMapper实例,但是直接返回new ObjectMapper()而非用Spring提供的Builder构建,也会跳过自动注册模块的逻辑。 - 依赖冲突:第三方依赖强制引入了低版本的Jackson核心包,导致Spring Boot管理的
jackson-datatype-jsr310模块版本和核心包版本不匹配,无法被正常加载注册。
对应解决方案
- 优先使用Spring注入的
ObjectMapper实例,不要手动new - 如果需要自定义
ObjectMapper,使用Jackson2ObjectMapperBuilder来构建:
@Bean public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { return builder.build(); // 如果有自定义配置,可以在build前调整参数 }
- 排查依赖冲突,执行
mvn dependency:tree(Maven)或gradlew dependencies(Gradle)检查Jackson相关包的版本,统一使用Spring Boot管理的版本,不要单独指定Jackson版本号。
内容的提问来源于stack exchange,提问作者Miguel Santos
相关产品推荐
相关产品推荐

