OpenFeign 是 Spring Cloud 中声明式 HTTP 客户端,通过接口+注解替代 RestTemplate;需引入依赖、启用 @EnableFeignClients、定义 @FeignClient 接口、注入调用,并可配置超时、日志、拦截器及降级。

在 Spring Cloud 项目中,OpenFeign 是声明式 HTTP 客户端,用接口 + 注解的方式替代手写 RestTemplate 调用,简洁又易维护。
添加依赖和启用 Feign
在调用方(消费者)模块的 pom.xml 中引入:
- spring-cloud-starter-openfeign(核心依赖)
- spring-cloud-starter-loadbalancer(如用 Nacos/Eureka,需负载均衡支持)
在启动类上加 @EnableFeignClients 注解开启扫描:
@SpringBootApplication
@EnableFeignClients // 启用 Feign 客户端扫描
public class OrderApplication { ... }
定义 Feign 接口
创建一个接口,用 @FeignClient 指定目标服务名(对应注册中心里的 service-id),方法用 Spring MVC 注解描述请求:
@FeignClient(name = "user-service", url = "http://localhost:8081") // 可配 url(测试用),生产建议只写 name
public interface UserClient {
@GetMapping("/api/users/{id}")
UserDTO getUserById(@PathVariable("id") Long id);
<pre class="brush:php;toolbar:false;">@PostMapping("/api/users")
UserDTO createUser(@RequestBody UserDTO user);}
注意:
- name 必须与目标服务在注册中心注册的 spring.application.name 一致;
- 若未集成注册中心,可用 url 属性直连(不推荐用于生产);
- 参数注解(@PathVariable、@RequestParam、@RequestBody)不能省略,否则 Feign 无法正确绑定。
注入并调用
像普通 Spring Bean 一样注入接口,在 Service 或 Controller 中直接调用:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
@Service
public class OrderService {
@Autowired
private UserClient userClient; // 自动注入代理实现
<pre class="brush:php;toolbar:false;">public Order createOrder(Long userId) {
UserDTO user = userClient.getUserById(userId); // 远程调用,内部已集成负载均衡和熔断
// ...
}}
调用过程自动完成:服务发现 → 负载均衡选实例 → 发起 HTTP 请求 → 反序列化响应。
常用配置与增强
在 application.yml 中可配置超时、日志、编码器等:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
httpclient:
enabled: true # 启用 Apache HttpClient(更稳定,默认用 JDK HttpURLConnection)
loggerLevel: full # 日志级别:NONE/BASIC/HEADERS/FULL(开发调试用)
decode404: true # 404 响应也触发解码(默认抛异常)
还可自定义:
- 拦截器:实现 RequestInterceptor 统一加 token 或 header
- 错误解码器:继承 ErrorDecoder 统一处理远程异常
- fallback:加 fallback 属性指定降级类(需开启 feign.circuitbreaker.enabled=true)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










