老项目 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 包项目
  • 无需改造架构即可使用

如果本文对你有帮助,欢迎点赞、收藏、关注!

posted @ 2025-11-28 15:53  strong  阅读(0)  评论(0)    收藏  举报