openFeign介绍
OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。
一 服务方操作
1 添加依赖
添加了Spring Boot和Spring Cloud版本声明。
添加了web环境和eureka client依赖
2 编写配置
必须要有应用程序名,因为OpenFeign是通过应用程序名进行调用。
spring.application.name=applicationservice
二 客户端操作
1 添加依赖
比application service项目多了openfeign的依赖
2 编写配置
spring.application.name=applicationclient
server.port=8081
3 新建OpenFeign接口
OpenFeign接口命名:
调用应用程序+Feign
新建了com.bjsxt.feign.ApplicationServiceFeign。
注意:
@FeignClient 参数要写调用的Application Service的应用程序名
@RequestMapping中值要和需要调用的控制器方法URL相同
方法返回值要和调用控制器方法返回值相同。
方法名称随意,没有要求。
@FeignClient("APPLICATIONSERVICE")
public interface ApplicationServiceFeign {
@RequestMapping("/service1")
String suiyi();
}
4 调用
在实现类中直接注入OpenFeign接口对象即可。没有在启动类上添加@EnableFeignClients时此处可能会报编译错误。
三 OpenFeign访问带有参数的控制器
1 简单参数applicationclient中Feign接口添加方法
@RequestParam注解必须有
如果Feign接口方法参数名和调用控制器参数名相同可以省略@RequestParam的参数。
@RequestMapping("/service2")
String suiyi2(@RequestParam("name") String name123,@RequestParam int age)
2 传递请求体数据
如果Feign接口中方法参数没有写注解,表示把该参数值设置到请求体中,在Application Service方参数必须添加@RequestBody接收。
但是由于请求体数据特性,Feign接口方法最多只能出现一个不带有注解的参数。否则出现违法状态异常。
@RequestMapping("/service3")
public String service3(@RequestBody Map<String,Object> map){
System.out.println(map);
return map.toString();
}
@RequestMapping("/service4")
public String service4(@RequestBody String name){
System.out.println("name:"+name);
return "name:"+name;
}
3 Restful方式
由于SpringMVC支持Restful请求方式,所以在Feign接口中可以按照restful传递参数
@RequestMapping("/service5/{name}/{age}")
public String service6(@PathVariable String name,@PathVariable int age){
return name+","+age;
}