openFeign的使用

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;
}