整体流程鸟瞰

image.png

通过源码注释来了解

HttpMessageConverter的位置比较深,它的调用者是RequestResponseBodyMethodProcessor
可以通过它的调用者的注释来明白这个类的作用
image.png
翻译一下就是:RequestResponseBodyMethodProcessor使用HttpMessageConverter来处理请求,处理响应

看看这些实现类的继承图

image.png

了解下ContentNegotiationStrategy

image.png
解析的具体逻辑在ContentNegotiationStrategy#resolveMediaTypes 每一个实现类里面
具体的配置和创建用的是工厂模式
详见类ContentNegotiationConfigurer和ContentNegotiationManagerFactoryBean

哪里配置HttpMessageConverter

来源有点复杂
image.png
去找默认的HttpMessageConverter
image.png
去空的WebMvcConfigurationSupport的方法里面找
image.png
最终添加的逻辑,这里重复添加了jackson的2个.反正总共有8个
image.png
终于得到了最终的converters和多个converter

我们想要魔改HttpMessageConverter和ContentNegotiation

image.png

哪里配置ContentNegotiationManager,

为什么HttpMessageConverter是extend相当于是默认8个加上额外3个
而ContentNegotiationManager继承了,就顶掉了呢,先画一个整体图然后再来一个代码逻辑图
整体图
image.png
代码逻辑
image.png

瞄一眼springboot官方文档

image.png

image.png