• 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

  • 相关阅读:
    Android viewpager使用
    浙大MBA的复试自划线与国家线有什么关系?
    Day722. 空指针烦恼 -Java8后最重要新特性
    智能时代的蜕变:人工智能发展历程
    内网穿透,轻松实现PostgreSQL数据库公网远程连接!
    HTML中script 标签中的那些属性
    原生js打造日程表-支持鼠标滚轮滚动选择月份-可以移植到任何框架中
    美国服务器租用详细介绍与租用流程
    GBase 8c V3.0.0数据类型——HLL函数和操作符(聚合函数)
    elementUI table某列数据是数组,需要多行显示
  • 原文地址:https://blog.csdn.net/W2_Pan0125/article/details/128179732