非Spring Boot项目升级Spring5.3.20时Jackson报错解决方案
报错原因
编译异常由两处版本不兼容问题共同导致:
- Spring 5.x 已彻底移除适配Jackson 1.x(
org.codehaus.jackson包路径)的MappingJacksonHttpMessageConverter,统一使用适配Jackson 2.x(com.fasterxml.jackson包路径,即jackson-databind对应的官方实现)的MappingJackson2HttpMessageConverter。 - Jackson 1.x升级到2.x时全量更换了顶层包名,原序列化配置的枚举类也做了拆分,路径和归属都有调整。
正确替换方案
首先替换旧的导入语句,移除所有codehaus包下的Jackson相关导入,替换为以下2.x版本导入:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
目标代码段修正后完整写法如下:
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper defaultMapper = new ObjectMapper(); defaultMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); defaultMapper.configure(SerializationFeature.REQUIRE_SETTERS_FOR_GETTERS, true); mappingJacksonHttpMessageConverter.setObjectMapper(defaultMapper); converters.add(mappingJacksonHttpMessageConverter); }
注意事项
以上配置和原有代码的运行逻辑完全一致,不需要额外调整其他参数即可对齐旧版本的序列化行为。
内容的提问来源于stack exchange,提问作者Jeff Cook。
相关产品推荐
相关产品推荐

