引入依赖
:::tips 在服务消费者中引入Feign的依赖 :::
<!-- OpenFeign起步依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
代码实现
编写代码
:::tips 在服务消费者中启动类所在的包下新建client包,编写XxxClient接口,接口上打上@FeignClient注解,并指定其value属性为需要调用的服务的名称
如果需要在此接口中所有的请求路径前再加一层路径,可以通过@FeignClient注解的path属性指定路径
然后在接口中编写抽象方法,指定我们需要调用的微服务的请求方式、请求路径、请求体等参数,也就是将服务提供者Controller类中需要调用的方法(带上@GetMapping、@PostMapping等注解,注意保持完整的请求路径)复制过来改造为抽象方法
注意:
- 如果是Get请求,需要使用@RequestParam注解来绑定普通参数(注意非必传的参数配置@RequestParam注解的required属性为false),并指定@RequestParam注解的value属性为参数名称
不管是什么请求方式,都需要使用绑定参数的注解来设置参数名称 ::: ```java @FeignClient(value = “服务提供者的名称”) public interface XxxClient {
@GetMapping(“请求路径”) public 返回值 方法名(@注解(绑定参数名) 请求参数);
}
<a name="nroNx"></a>
### 启动类注解
:::tips
在服务消费者的启动类上需要打上@EnableFeignClients注解,用来扫描打上了@FeignClient注解的接口
注意如果接口不在启动类所在的包及其子包下,需要指定注解的basePackages或clients属性
- 方式一:指定Feign扫描的包全路径(推荐)
- @EnableFeignClients(basePackages = "com.xujiahao")
- 方式二:指定需要加载的Client接口
- @EnableFeignClients(clients = {XxxClient.class})
:::
```java
//扫描打上了@FeignClient注解的接口
@EnableFeignClients(basePackages = "com.xujiahao")
@SpringBootApplication
public class XxxApplication{
public static void main(String[] args){
SpringApplication.run(XxxApplication.class,args);
}
}
调用
:::tips 在服务消费者中需要调用服务提供者API的类中注入我们编写的接口,然后在方法中调用注入对象的方法 :::
@SpringBootTest
public class MyTest{
//注入我们编写的接口
@Autowired
private XxxClient xxxClient;
@Test
public void test(){
//没有返回值就不用接收
返回值 对象名 = xxxClient.方法名(请求参数);
}
}