前面已经完成了 Feign 的准备工作,下面将通过一个简单的例子来介绍如何使用 Feign 调用 HTTP 服务。
💢注意,该项目仅仅是一个非常简单的 Spring Boot 项目,不需要引入 Spring Cloud 相关的依赖。
完整的 pom.xml 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hxstrive</groupId>
<artifactId>demo_netflix_feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo_netflix_feign</name>
<description>demo_netflix_feign</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- feign 依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-jackson</artifactId>
<version>11.8</version>
</dependency>
</dependencies>
<build>
<finalName>demo_netflix_feign</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>一个常见的 Spring Boot 启动类,代码如下:
package com.hxstrive.demo_netflix_feign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
* @author hxstrive.com
*/
@SpringBootApplication
public class DemoFeignApplication {
public static void main(String[] args) {
SpringApplication.run(DemoFeignApplication.class, args);
}
}该配置文件仅仅用来配置端口和应用名称、以及日志信息,内容如下:
server:
port: 8080
spring:
application:
name: feign_application
logging:
level:
root: debug说的直白点,就是创建一个接口,该接口定义了用来调用目标 HTTP 服务的一些方法定义,一个简单的 Feign 客户端代码如下:
package com.hxstrive.demo_netflix_feign.feign;
import feign.Contract;
import feign.Feign;
import feign.RequestLine;
import feign.codec.Decoder;
import feign.codec.Encoder;
/**
* 用户 Feign
* @author hxstrive.com
*/
public interface SimpleFeign {
// 定义获取用户信息的方法
@RequestLine("GET /simple/hello")
public String get();
// 创建Feign客户端实例的静态方法
static SimpleFeign create() {
return Feign.builder()
.encoder(new Encoder.Default())
.decoder(new Decoder.Default())
.contract(new Contract.Default())
.target(SimpleFeign.class, "http://localhost:8090/");
}
}注意,这里没有在类上面添加任何注解,在使用的时候通过类名调用 create() 静态方法或一个 SimpleFeign 接口的实例,通过调用该实例的 get() 方法就可以发起 http://localhost:8090/simple/hello 的 GET 请求。
该控制器用来接收客户端的请求,然后使用 Feign 客户端调用具体的 HTTP 服务,代码如下:
package com.hxstrive.demo_netflix_feign.controller;
import com.hxstrive.demo_netflix_feign.dto.CommonReturn;
import com.hxstrive.demo_netflix_feign.entity.User;
import com.hxstrive.demo_netflix_feign.feign.SimpleFeign;
import com.hxstrive.demo_netflix_feign.feign.UserFeign;
import com.hxstrive.demo_netflix_feign.feign.UserRestfulFeign;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 控制器
* @author hxstrive.com
*/
@RestController
public class FeignController {
@GetMapping("/demo1")
public String demo1() {
return SimpleFeign.create().get();
}
}启动该 Spring Boot 项目,同时将“Feign 准备工作”章节的服务启动起来。在浏览器访问 localhost:8080/demo1 地址,效果如下图:

从上图可知,已经成功使用 Netflix Feign 调用到了目标服务,搞定……后续将学习更多关于 Feign 的知识。
💢注意:该示例是后续学习的基础示例,后续将在该示例的基础上进行,不会单独创建项目。💢