feign可以调用内部服务,也可以http调用第三方请求。
feign是RestTemplate的封装。但是restTemplate需要公共方法处理入参和返回值结构转化,比较麻
烦,所以推荐feign调用。
首先,这里讲下form表单 application/x-www-form-urlencoded 这种方式的调用,因为比较特殊,
所以单独说说它。
①加入依赖
<!--open feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--open feign okhttp-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
②创建feign接口
@FeignClient(url = "${identity.serverAddress}", name = "identity-feign")
public interface IIdentityFeignClient {
@PostMapping(value = "${identity.loginMethod}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@ResponseBody
IdentityTokenDTO identityToken(@RequestBody Map<String, ?> tokenVO);
}
@FeignClient的name属性一定要写,会报错;
consumers属性的枚举类参数,一定要声明,否则不支持x-www-form-urlencoded;
方法的入参类型一定是Map<String,?>一定要是问号,否则接口不通400;
至于返回值类型,这样子是成功的,按照成功时候的属性写个类。等着探究探究
③启动类添加注解 @EnableFeignClients。注意是否扫描到@EnableFeignClients(“Feign接口所在
的包名”)
④日志打印
在配置文件中,添加如下,注意路径和类名
logging:
level:
org.qdsm.base.common.IIdentityFeignClient: debug
feign:
client:
config:
default:
loggerLevel: full
A服务调用B服务 步骤:
①B正常新建controller,但是建议用feignController新建做业务区分
②A新建接口类,要记得添加注解@FeignClient;还要记得在启动类添加@EnableFeignClients