SpringBoot 全局配置 Jackson 未生效

本贴最后更新于 1080 天前,其中的信息可能已经时移世易

问题背景

由于在项目中有以一些不得已的原因,继承了 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport 类,导致配置文件中 Jackson 的配置失效,也参考过一些文章,解决办法都是将继承 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport 类改为实现 org.springframework.web.servlet.config.annotation.WebMvcConfigurer 接口来解决,但是由于一些原因,改为实现接口后原有功能会出现一些问题,所以采用了其他方式实现。

SpringBoot 版本 2.5.1

解决方案

在继承了 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport 类的类中重写 configureMessageConverters 方法,此方法是参考 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#configureMessageConvertersf 方法写的,手动把消息转换的自动配置添加到当前配置中,使 Jackson 的配置生效,代码如下

@Autowired
private final ObjectProvider<HttpMessageConverters> messageConvertersProvider;

/**
 * 由于继承WebMvcConfigurationSupport会导致SpringBoot自动装配失效,从而导致Jackson全局配置失效,
 * 所以参考WebMvcAutoConfiguration类中configureMessageConverters方法,使Jackson配置生效
 * {@link WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#configureMessageConverters(java.util.List)}
 *
 * @param converters 将消息转换器添加到的列表(最初是一个空列表)
 */
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    this.messageConvertersProvider
            .ifAvailable((customConverters) -> converters.addAll(customConverters.getConverters()));
}

参考文章

https://blog.csdn.net/cs4380/article/details/101979853?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.tagcolumn&spm=1001.2101.3001.4242.0

  • Jackson
    2 引用
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
2 操作
tlbcc 在 2021-12-07 16:27:39 更新了该帖
tlbcc 在 2021-12-02 11:15:52 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...