概述
本期主要研究一下Gateway中的基于请求头的消息转换代码
首先最主要的类是
BaseDefaultCodecs spring在加载的时候往里面塞了一些转换器.
CacheRequestBodyGatewayFilterFactory
如果想要缓存请求体内容用于业务使用cacheRequestBodyapi后会加载这个类
方法中核心转换的已经标记出来了,其中
config.getBodyClass是想要转换的实体类类型源代码跟进去
BodyExtractors
我们可以看到核心就是判断 请求的 Content-Type 和想要转换的对象是否可以被reader解析,我们拿xml格式来举个例子
BodyInserters
同理,数据写入的时候就是使用BodyInserters.在gateway中的NettyWriteResponseFilter中.
springMVC 中的类型转换
在ServletInvocableHandlerMethod中
我们先来看入参是如何转换为我们的实体对象的
AbstractMessageConverterMethodArgumentResolver这个类中
接下来是返回数据的解析
AbstractMessageConverterMethodProcessor类中的writeWithMessageConverters方法
我们从上面的源码可以看到在springMVC返回数据的时候会先判断请求的Accept中的数据