最近项目中用到的 SpringBoot 版本从 1.5.x 升级到了 2.x。其中不少功能无法使用,本文记录一下升级 Springboot2 后 configureMessageConverters 自定义消息转换器不生效问题。
这个问题搜索了很多资料,都无法解决。再不就是答复所谓,没彻底解决问题。本文提供一种简单的思路,只需简单的修改一下 api 的调用即可让自定义的消息转换器生效。
首先是升级 SpringBoot 后,WebMvcConfigurerAdapter 这个类就过时了。其二,自定义的 configureMessageConverters 消息转换器也不生效了。查看官方的文档,提到了可以继承 WebMvcConfigurationSupport 类或实现 WebMvcConfigurer 接口来替换 WebMvcConfigurerAdapter。
安装官方的办法,先继承 WebMvcConfigurationSupport 类,之后你会发现所有的静态资源全部 404 了。这个时候就需要重写 addResourceHandlers 方法了,重新映射静态资源。太过麻烦,而且自定义的消息转换器也不生效。
不少文章说,开启 @EnableWebMvc 注解就行了。
但是这样做了之后,就不如实现 WebMvcConfigurer 接口方便了。
实现 WebMvcConfigurer 接口之后,你会发现自定义的消息转换器继续不生效。于是乎就在下面的方法中取了一个断点。
根据上图中的断点可知,默认的就有 14 个消息转换器了。而 configureMessageConverters 方法中是一个 list 参数。直接向其中添加 HttpMessageConverter 后,默认是排在最后的。就造成了你自定义的消息转换器不生效。其实是被其他转换器接管了,因此,想要让我们自定义的消息转换器生效之需要把它添加到 list 的第一个就可以了。
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0, new MyMappingJson2HttpMessageConverter());
}
官方文档已经说的很明白了,要么重写默认的 SpringMVC 消息转换器,要么就使重写 configureMessageConverters 或 extendMessageConverters 方法,把我们的自定义消息转换器设置成默认第一。
: » 解决Springboot2 configureMessageConverters自定义消息转换器不生效问题
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/252269.html