SpringMVC对消息转换器的处理相关
1 SpringBoot启动MVC本质是配置一些处理MVC请求的组件到Spring容器中
2 SpringBoot默认提供了Spring MVC自动配置,不需要添加@EnableWebMvc注解去启动
3 如果需要配置MVC,比如拦截器,格式化,视图,Http消息转换器,可以使用@Configuration并实现WebMvcConfigurer接口,不要添加@EnableWevc
4 @EnableWebMvc与SpringMvc的MVC自动装配类WebMvcAutoConfiguration不会都执行,他们是冲突的,有@EnableWebMvc,那么Spring MVC的自动装配类就不会生效,具体是因为Spring MVC的自动装配类是早在没有WebMvcConfiguratuonSupport生效的,而@EnableWebMvc上使用了@Import,它导入的是WebMvcConfigurationSupor的子类
二 关于消息转换器HttpMessageConvert加载顺序
1 消息转换是在RequestMappingHandlerAdapter中请求处理时发生的
2 而创建的RequestMappingHandlerAdpter是在Spring MVC自动装配
3 RequestMappingHandlerAdpter 的Bean创建过程,它自己会创建3个默认的消息转换器,其中就包括jackson
3.2 创建完后,它又会从从WebMvcCongifurationSupport获取HttpMessageConverter,1 它先从我们自定义的自定义配置的Http消息转换器,WebMvcConfigurer获取转换器,2 如果没获取到,则会添加默认的Http消息转换器 3 然后是调用extendMesaageConverts 往消息转换器中添加Http消息转换器
4 HttpMesaageConvertsAutoConfiguration 会加载默认的HttpMessageConvert
5 执行configureMessageConverters会这里它执行的是DeletegatingWebMvcConfiguration的配置消息转换器方法configureMessageConverter。他是会遍历每一个WebMvcConfigurer,然后执行它的configureMessageConverter
5.2 一般大概有三个WebMvcConfigurer,1 WebMvcAutoConfigurationAdapter,这个也是优先级最高的,他会加载8大默认消息转换器。 2 自定义消息转换器,也就是我们经常配置的消息转换器3 SpringDataWebConfiguration 它的里面有一个extendMessageConverters,它会创建一个jackson相关的ProjectingJackson2HttpMessageConvert,并将这个转换器放到转换器的最前面
补充说明 Projecting只会处理被@ProjectdPayload注解声明的json对象
6 注意:在使用WebMvcConfigurer 配置转换器,如果直接add添加,则会添加到转换器列表的末尾
7 可以通过设置spring.mvc.converters.prefered-json-mapper:gson,设置SpringMvc设置gson做HttpMessage的转换
三 WebMvcAutoConfiguration会在WebMvcAutoConfigurationAdapter设置上默认的8 大消息转换器,而使用@EnableMvc不会设置默认8大消息转换器
参考 https://blogs.csdn.net/zxc123e/article/details/84636521
参考 http://www.cnblogs.com/cainiao-Shun666/p/16016116.html
参考: https://blogs.csdn.net/mickjoust/article/details/106331413