整体流程鸟瞰
通过源码注释来了解
HttpMessageConverter的位置比较深,它的调用者是RequestResponseBodyMethodProcessor
可以通过它的调用者的注释来明白这个类的作用
翻译一下就是:RequestResponseBodyMethodProcessor使用HttpMessageConverter来处理请求,处理响应
看看这些实现类的继承图
了解下ContentNegotiationStrategy
解析的具体逻辑在ContentNegotiationStrategy#resolveMediaTypes 每一个实现类里面
具体的配置和创建用的是工厂模式
详见类ContentNegotiationConfigurer和ContentNegotiationManagerFactoryBean
哪里配置HttpMessageConverter
来源有点复杂
去找默认的HttpMessageConverter
去空的WebMvcConfigurationSupport的方法里面找
最终添加的逻辑,这里重复添加了jackson的2个.反正总共有8个
终于得到了最终的converters和多个converter
我们想要魔改HttpMessageConverter和ContentNegotiation
哪里配置ContentNegotiationManager,
为什么HttpMessageConverter是extend相当于是默认8个加上额外3个
而ContentNegotiationManager继承了,就顶掉了呢,先画一个整体图然后再来一个代码逻辑图
整体图
代码逻辑