解决Springboot2 configureMessageConverters自定义消息转换器不生效问题

JAVA herman 48浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
饿了么大量招人,我内推!Java 方向!薪资不设上限,工作年龄不限!工作地点限魔都,可电话面试!简历,发我微信:codedq
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

最近项目中用到的 SpringBoot 版本从 1.5.x 升级到了 2.x。其中不少功能无法使用,本文记录一下升级 Springboot2 后 configureMessageConverters 自定义消息转换器不生效问题。

这个问题搜索了很多资料,都无法解决。再不就是答复所谓,没彻底解决问题。本文提供一种简单的思路,只需简单的修改一下 api 的调用即可让自定义的消息转换器生效。

首先是升级 SpringBoot 后,WebMvcConfigurerAdapter 这个类就过时了。其二,自定义的 configureMessageConverters 消息转换器也不生效了。查看官方的文档,提到了可以继承 WebMvcConfigurationSupport 类或实现 WebMvcConfigurer 接口来替换 WebMvcConfigurerAdapter。

安装官方的办法,先继承 WebMvcConfigurationSupport 类,之后你会发现所有的静态资源全部 404 了。这个时候就需要重写 addResourceHandlers 方法了,重新映射静态资源。太过麻烦,而且自定义的消息转换器也不生效。

不少文章说,开启 @EnableWebMvc 注解就行了。

但是这样做了之后,就不如实现 WebMvcConfigurer 接口方便了。

实现 WebMvcConfigurer 接口之后,你会发现自定义的消息转换器继续不生效。于是乎就在下面的方法中取了一个断点。

configureMessageConverters自定义消息转换器不生效

根据上图中的断点可知,默认的就有 14 个消息转换器了。而 configureMessageConverters 方法中是一个 list 参数。直接向其中添加 HttpMessageConverter 后,默认是排在最后的。就造成了你自定义的消息转换器不生效。其实是被其他转换器接管了,因此,想要让我们自定义的消息转换器生效之需要把它添加到 list 的第一个就可以了。

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
	converters.add(0, new MyMappingJson2HttpMessageConverter());
}
configureMessageConverters 不生效

官方文档已经说的很明白了,要么重写默认的 SpringMVC 消息转换器,要么就使重写 configureMessageConverters 或 extendMessageConverters 方法,把我们的自定义消息转换器设置成默认第一。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 解决Springboot2 configureMessageConverters自定义消息转换器不生效问题