一、自定义 Encoder/Decoder
feign-en-de-code.7z
1.1、需求
需求:第三方 API 调用使用 Feign 发起调用,请求和响应有如下要求
- 请求:需要两个参数:
参数1:把所有入参按照一定格式排序,然后加密成一个字符串
参数2:验签 - 响应:响应参数进行对象映射
功能
- Encoder :完成请求参数的加密和验签的处理
-
1.2、案例项目结构
comsumer 发起 API 请求调用
-
1.2、请求API
发起 API 请求参数:UserInfo 对象
接收响应的对象:MyResponse 对象,对应两个字段:status 和 response
1.3、模拟第三方API代码
接收参数:sign 和 requestXml
- 响应结果:CommonResponse 对象,对应两个字段:status 和 response
1.3、Encoder 实现
第三方 API 和我们发起 API的组装参数不一样,所以需要通过 Encoder 将我们的入参统一封装成 第三方 API 需要的入参
关键代码实现如下:(文件路径:com.zhixing.feign.encoding.MySelfEncoder)
主要逻辑:
根据第三方API的格式,和要求,对我们的入参(这里是User Info对象)进行处理,重新组装符合第三方API要求的入参。
1.4、Decoder 实现
第三方 API 返回的响应主要是两个字段:status 和 response ,这两个字段以 JSON 的格式返回
如:
{
"status": 200,
"response":"响应结果"
}
我们程序的接收需要,根据响应进行接收
Decode 相关实现关键代码如下:(包路径:com.zhixing.feign.encoding.MySelfDecode)
Decoder 的处理,根据程序接收对象分为三种
- 字符串接收
直接交给 SpringDecoder 处理(默认使用 HttpMessageConverters 处理) - Response 对象接收
直接返回 Response 对象 - 自定义对象接收
从 Response 获取 Body ,也就是 JSON 字符,然后将 JSON 转换成 对象,直接进行返回