老项目 Java EE + Spring MVC(非 Spring Boot)使用openfeign
老项目 Java EE + Spring MVC(非 Spring Boot)使用feign
一、前言
大家知道,在SpringBoot项目中使用Feign比如简单,只需要开启@FeignClient注解,就可以调用了,但在一些SpringMVC项目中使用就比较麻烦,本文将介绍在老项目中如何相对简单的使用Feign。
二、Feign 是什么?
Feign 是一个声明式 HTTP 调用框架,可以像调用本地方法一样调用远程服务。
- 无需写 HttpClient / RestTemplate
- 支持接口调用
- 支持注解绑定参数
三、环境说明(可选)
- JDK 1.8+
- 非 Spring Boot 项目 / 老项目
- 老项目无法轻易引入 Spring Cloud 体系,所以选用原生 Feign(feign-core)而不是 OpenFeign
四、添加 Maven 依赖
<!-- Feign 核心 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>12.5</version>
</dependency>
<!-- Feign Gson 支持 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>12.5</version>
</dependency>
<!-- 日志输出(Slf4j) -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-slf4j</artifactId>
<version>12.5</version>
</dependenc
五、定义 Feign 接口(API Client 层)
例如要访问一个“用户服务”的 HTTP 接口:
package com.example.client;
import feign.Headers;
import feign.RequestLine;
public interface UserApiClient {
@RequestLine("GET /api/user/{id}")
UserResponse getUserById(@Param("id")Long id);
@RequestLine("POST /api/user/create")
@Headers("Content-Type: application/json")
CreateUserResponse createUser(CreateUserRequest request);
}
六、构建 Feign 客户端(在 Service 中)
package com.example.service;
import com.example.client.UserApiClient;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import feign.Feign;
import feign.Logger;
import feign.gson.GsonDecoder;
import feign.gson.GsonEncoder;
import feign.slf4j.Slf4jLogger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class UserApiService {
@Value("${user.api.base-url}")
private String baseUrl;
private UserApiClient buildClient() {
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
return Feign.builder()
.encoder(new GsonEncoder(gson))
.decoder(new GsonDecoder(gson))
.logger(new Slf4jLogger(UserApiClient.class))
.logLevel(Logger.Level.FULL) // 输出详细日志
.target(UserApiClient.class, baseUrl);
}
public UserResponse getUser(Long id) {
return buildClient().getUserById(id);
}
public CreateUserResponse createUser(CreateUserRequest req) {
return buildClient().createUser(req);
}
}
注意在 application.properties 文件中添加 user.api.base-url=http://example.com
七、调用示例
UserResponse user = userApiService.getUser(1001L);
CreateUserRequest req = new CreateUserRequest();
req.setName("Tom");
req.setEmail("tom@example.com");
CreateUserResponse resp = userApiService.createUser(req);
八、总结
- 非 Spring Boot 项目依然能轻松接入 Feign
- Feign 使用简单,避免 RestTemplate + HttpClient 的繁琐代码
- 适合老项目、war 包项目
- 无需改造架构即可使用
如果本文对你有帮助,欢迎点赞、收藏、关注!

浙公网安备 33010602011771号