Gateway&springMVC源码解析之对象转换

211 阅读1分钟

概述

本期主要研究一下Gateway中的基于请求头的消息转换代码

image.png 首先最主要的类是BaseDefaultCodecs spring在加载的时候往里面塞了一些转换器.

CacheRequestBodyGatewayFilterFactory

如果想要缓存请求体内容用于业务使用cacheRequestBodyapi后会加载这个类

image.png 方法中核心转换的已经标记出来了,其中config.getBodyClass是想要转换的实体类类型源代码跟进去

image.png

BodyExtractors

image.png 我们可以看到核心就是判断 请求的 Content-Type 和想要转换的对象是否可以被reader解析,我们拿xml格式来举个例子

image.png

BodyInserters

同理,数据写入的时候就是使用BodyInserters.在gateway中的NettyWriteResponseFilter中.

image.png

springMVC 中的类型转换

ServletInvocableHandlerMethodimage.png 我们先来看入参是如何转换为我们的实体对象的AbstractMessageConverterMethodArgumentResolver这个类中 image.png 接下来是返回数据的解析AbstractMessageConverterMethodProcessor类中的writeWithMessageConverters方法

image.png

image.png

image.png

image.png 我们从上面的源码可以看到在springMVC返回数据的时候会先判断请求的Accept中的数据

image.png

image.png