SpringBoot定义HttpMessageConverter

1.HttpMessageConverter的作用

其实通过名字就可以大概猜个七七八八,就是SpringMvc在接或传Http消息的一个转换器,通俗的理解一下。
转换流程如下图:


image.png

2.如何定义HttpMessageConverter

Spring官网给出两种定义方式
①xml方式

image.png

②configuration 方式
image.png

3.@EnableWebMvc

在用configuration 方式自定义HttpMessageConverter看到了官方的例子,说需要添加一个@EnableWebMvc的注解,那究竟要不要添加呢,这个注解是做什么的呢,笔者在这个注解上耽误了一些时间,下面我将娓娓道来。
①@EnableWebMvc注解的作用
上图:


image.png

EnableWebMvc引入了DelegatingWebMvcConfiguration,DelegatingWebMvcConfiguration继承了WebMvcConfigurationSupport,ok不要怕,记住WebMvcConfigurationSupport就够了,记住WebMvcConfigurationSupport,记住WebMvcConfigurationSupport重要的事说三遍。
简单说EnableWebMvc的作用就是实例化了一个WebMvcConfigurationSupport

②如果不加EnableWebMvc,谁会去实例化WebMvcConfigurationSupport
请看WebMvcAutoConfiguration


image.png

ok,不用往下看就知道了WebMvcAutoConfiguration肯定实例化WebMvcConfigurationSupport,就因为红线那句话,当缺少WebMvcConfigurationSupport的bean的时候,这个自动配置才会执行

那么看到这里大家是不是已经知道答案了,当你的模块使用了@EnableWebMvc,那你将失去springBoot的自动配置,那如果使用@EnableWebMvc会发生什么呢?
看下图:


image.png

又见老大哥,在重要的事情强调三遍的时候我们知道老大哥继承了WebMvcConfigurationSupport,然后如图:


image.png

没错老大哥把所有散落在外的实现了WebMvcConfigurer接口的bean都加载进来了,为啥要加载,肯定是为了覆盖默认配置呀,所以说如果不使用@EnableWebMvc,那么只要实现了WebMvcConfigurer,你的配置会覆盖SpringBoot的默认配置,如果使用了@EnableWebMvc那么这个世界只有你的配置。

总结:本文是根据官方文档和对于源码的简单分析得出的结论,进行了一部分验证,如果大家有什么问题欢迎提出,交流,如果没有问题且你从文章中得到了些许帮助,那么伸出你的小手点个赞就是对笔者最大的鼓励,谢谢大家读完!欢迎提出意见

你可能感兴趣的:(SpringBoot定义HttpMessageConverter)