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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值