1. 概述

在这个教程中,我们将展示如何在Feign客户端中使用@RequestLine注解。@RequestLine是定义与RESTful Web服务连接的URI和查询参数的模板。

2. Maven依赖

首先,我们创建一个Spring Boot web项目,并在pom.xml文件中添加spring-cloud-starter-openfeignfeign-core依赖。spring-cloud-starter-openfeign内部包含了feign-core依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.1.2</version>
</dependency>

或者

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
    <version>11.8</version>
</dependency>

3. @RequestLine在Feign客户端

@RequestLine Feign注解作为参数在Feign客户端中指定HTTP动词、路径和请求参数。路径和请求参数使用@Param注解进行指定。

在Spring Boot应用中,通常我们会使用@FeignClient,但如果我们不想使用spring-cloud-starter-openfeign依赖,也可以使用@RequestLine。使用这个依赖时,如果同时使用@RequestLine@FeignClient,会抛出IllegalStateException

@FeignClient注解的String值是一个任意名称,用于创建Spring Cloud LoadBalancer客户端。我们可以根据需要指定URL和其他参数。

现在,我们创建一个接口来使用@RequestLine

public interface EmployeeClient {
    @RequestLine("GET /empployee/{id}?active={isActive}")
    @Headers("Content-Type: application/json")
    Employee getEmployee(@Param long id, @Param boolean isActive);
}

同时,我们也应该提供@Headers,定义REST API所需的头信息。

接下来,我们将调用创建的接口来调用实际的API:

EmployeeClient employeeResource = Feign.builder().encoder(new SpringFormEncoder())
  .target(EmployeeClient.class, "http://localhost:8081");
Employee employee = employeeResource.getEmployee(id, true);

4. 总结

在这篇文章中,我们展示了何时以及如何在Feign客户端中使用@RequestLine注解。

如惯例,本教程的所有代码示例可在GitHub上找到。