跳到主要内容

【18】RequestTemplate(请求模板)源码分析

文章目录

  • 前言
  • 核心类
    • RequestTemplate
  • 源码分析
      1. 进入工厂类
    1. 请求参数为对象【POST】
    1. 请求参数为对象【GET】
    1. @RequestParam 注解【GET】
    1. 转换为Request

前言

紧接上文,之前分析了方法处理器是如何进行加载及执行的,其中提到了,在调用Feign 接口方法时,会根据方法参数创建请求模板(RequestTemplate),接下来我们分析下这个是如何加载及执行的。

核心类

RequestTemplate

Feign 中存在各种各样的模板类,RequestTemplate就是其中封装了执行请求需要的相关信息,比如请求方式、路径等。

RequestTemplate中封装了执行请求所需的相关信息:

	// 查询模板
private final Map<String, QueryTemplate> queries = new LinkedHashMap();
// 消息头模板
private final Map<String, HeaderTemplate> headers;
// 请求的目标地址
private String target;
// URL 后面的片段
private String fragment;
// 是否已解析
private boolean resolved;
// URI 模板
private UriTemplate uriTemplate;
// 请求体模板
private BodyTemplate bodyTemplate;
// 请求方式
private HttpMethod method;
// 字符集
private transient Charset charset;
// 请求体
private Body body;
// 是否斜杠转义
private boolean decodeSlash;
// 集合格式化
private CollectionFormat collectionFormat;
// 方法元数据
private MethodMetadata methodMetadata;
// 代理的目标对象
private Target<?> feignTarget;