当前位置: 首页 > news >正文

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

相关文章:

  • LabVIEW自动机械变速器(AMT)开发
  • UE4 3D文字自动换行
  • 常见物联网面试题详解
  • 基于Springboot+Vue+Java的校园资料分享平台
  • 《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》
  • java io包
  • MAC | linux | SSH 密钥验证
  • 【JS】【Vue3】【React】获取滚轮位置的方法:JavaScript、Vue 3和React示例
  • uniapp的扩展组件uni-popup 弹出层自动打开
  • 开源大模型LLM大爆发,数据竞赛已开启!如何使用FuseLLM实现大语言模型的知识融合?
  • [Mac软件]Adobe Substance 3D Stager 2.1.4 3D场景搭建工具
  • 15:00面试,15:06就出来了,问的问题过于变态了。。。
  • Linux-文件压缩解压
  • [附源码]计算机毕业设计JAVA医药管理系统
  • [附源码]计算机毕业设计基于SpringBoot+Vue的健身房会员系统的设计与实现
  • 9 特色聚类
  • python中的集合详解
  • pringboot面向爱宠人群的宠物资讯系统36as8计算机毕业设计-课程设计-期末作业-毕设程序代做
  • Flink系列之Flink中StateBackend深入剖析和应用
  • Java可变参数和集合工具类Collections的详细介绍
  • 网站构建初级教程
  • 项目管理逻辑:老板为什么赔钱的项目也做?为什么害怕你闲着?
  • Spring Boot 框架整合 MyBatis 连接数据库,详细说明
  • MySQL主从同步
  • 微服务自动化【Docker-Compose】
  • 在Postgres中分页的五种方法,从基本到异国情调
  • 工作经历分享
  • 堆(二叉堆)-优先队列-数据结构和算法(Java)
  • awk命令的使用
  • 初学Nodejs(5):npm包管理器与包的发布
  • mysql高阶语句
  • [附源码]Python计算机毕业设计Django勤工俭学管理小程序