前面已经完成了 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 的知识。
💢注意:该示例是后续学习的基础示例,后续将在该示例的基础上进行,不会单独创建项目。💢