添加一个converter的方式有三种(实例中 JavaSerializationConverter 为自定义类)
其中,configureMessageConverters 与 extendMessageConverters 它们的区别的是第一个不会继承框架默认的消息转换器,第二个是继承了的。也就是说使用第一种方法配置就只有方法里面自己配置的消息转换器,而是用第二种则除了自己配置的还有框架自带的。
// 添加converter的第一种方式,代码很简单,单个转换类的化也是推荐的方式,如果是多个,则推荐下面两种 // 这样做springboot会把我们自定义的converter放在顺序上的最高优先级(List的头部) // 即有多个converter都满足Accpet/ContentType/MediaType的规则时,优先使用我们这个
@Bean public JavaSerializationConverter javaSerializationConverter() {
return new JavaSerializationConverter(); } // 添加converter的第二种方式 // 通常在只有一个自定义WebMvcConfigurerAdapter时,会把这个方法里面添加的converter(s)依次放在最高优先级(List的头部) // 虽然第一种方式的代码先执行,但是bean的添加比这种方式晚,所以方式二的优先级 大于 方式一 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // add方法可以指定顺序,有多个自定义的WebMvcConfigurerAdapter时,可以改变相互之间的顺序 // 但是都在springmvc内置的converter前面 converters.add(new JavaSerializationConverter()); } // 添加converter的第三种方式 // 同一个WebMvcConfigurerAdapter中的configureMessageConverters方法先于extendMessageConverters方法执行 // 可以理解为是三种方式中最后执行的一种,不过这里可以通过add指定顺序来调整优先级,也可以使用remove/clear来删除converter,功能强大 // 使用converters.add(xxx)会放在最低优先级(List的尾部) // 使用converters.add(0,xxx)会放在最高优先级(List的头部) @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new JavaSerializationConverter()); }
参考文档:
https://www.cnblogs.com/page12/p/8166935.html
https://www.cnblogs.com/woyujiezhen/p/12105852.html