关于Feign
Feign通过注解声明的方式简单化的实现了Http的相关调用,使我在以http方式调用远程接口时更加简单,代码也更加简洁,只需要创建接口,增加相关的注解就可以了。
使用
引入相关包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.0.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>10.2.0</version>
<scope>compile</scope>
</dependency>
注解声明
- @PostMapping、@GetMapping 声明请求方法,同时可配置header,请求、返回值类型等
- @RequestParam 声明参数通过url地址传递
- @RequestBody 声明参数通过requestBody传递
调用服务端接口(Get、Post不同形式只需改变相关 @Mapping注解,具体根据调用接口的要求就可以)
- RequestBody中传参 - Map形式实现,map中添加相关参数
@FeignClient(name = "test", url = "${test.url}")
public interface SensitiveRemoteService {
@PostMapping(value = "/feign/test", consumes = MediaType.APPLICATION_JSON_VALUE
,headers = {"Content-Type=application/json", "key=${test.key}"})
SensitiveRespVo batchMatch(Map<String,?> body);
}
- RequestBody中传参 - 对象形式实现,添加注解@RequestBody,这种形式限制只能一个参数,所以自己要封装好参数到一个对象
@FeignClient(name = "test", url = "${test.url}")
public interface SensitiveRemoteService {
@PostMapping(value = "/feign/test", consumes = MediaType.APPLICATION_JSON_VALUE
,headers = {"Content-Type=application/json", "key=${test.key}"})
SensitiveRespVo batchMatch(@RequestBody SensitiveReqVo sensitiveReqVo);
}
- 地址传参 - 添加注解@RequestParam
@FeignClient(name = "test", url = "${test.url}")
public interface SensitiveRemoteService {
@PostMapping(value = "/feign/test", consumes = MediaType.APPLICATION_JSON_VALUE
,headers = {"Content-Type=application/json", "key=${test.key}"})
SensitiveRespVo batchMatch(@RequestParam("param1") String param1, @RequestParam("param2") String param2);
}
总结
Feign通过解析注解、使用代理的方式封装我们模版化的http请求,一步一步封装为真正的请求,大大简化了代码中的http调用。
跟进去可以到看的代理封装请求