行业资讯 2025年08月6日
0 收藏 0 点赞 984 浏览 2996 个字
摘要 :

文章目录 第1步:新建Maven项目 第2步:实现基于Feign的底层HTTP请求类 第3步:封装api接口实现类 第4步:调用接口 关于什么是OpenFeign在讲Spring Cloud时的文章中介……




  • 第1步:新建Maven项目
  • 第2步:实现基于Feign的底层HTTP请求
  • 第3步:封装api接口实现类
  • 第4步:调用接口

关于什么是OpenFeign在讲Spring Cloud时的文章中介绍过,具体可以参考(21到24小节):

OpenFeign概述—SpringCloud(H版)微服务学习教程(21)

文章目录 一、OpenFeign是什么 二、OpenFeign功能 三、Feign和OpenFeign的区别 […]

不过以上对OpenFeign的使用都是基于Spring Cloud整合之后的,如果我们想单独使用OpenFeign来实现HTTP请求调用第三方接口,我们该如何去实现呢?这里我们的举列应用场景就是实现一个java项目(非web项目),封装底层http请求接口,打包成sdk可供其他项目使用。以下是实现该案例的步骤:

第1步:新建Maven项目

我们首先新建一个Maven项目(基于quick-start)如下,然后再pom.xml中导入相关依赖如下:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
    <version>9.7.0</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-gson</artifactId>
    <version>9.7.0</version>
</dependency>

具体的版本可根据自己的需要进行选择。

第2步:实现基于Feign的底层HTTP请求类

接着我们新建一个http包,我们在包中新建一个HTTP类,这里我们使用OkHttp来实现,具体代码如下:

public class OkHttpFeign extends Feign {
    private static final Builder BUILDER = build();
    private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient();

    public OkHttpFeign() {
    }

    public static Builder build() {
        return Feign.build().client(OK_HTTP_CLIENT);
    }

    public static <T> T target(Class<T> apiType, String host) {
        return BUILDER.target(apiType, host);
    }
}

注意在Feign.build()时我们还可以指定一些其他参数,比如编码、请求选项、重试策略等,如下:

public static Builder build() {
      return Feign.builder()
              .decoder(new StringDecoder())
              .options(new Request.Options(1000, 3500))
              .retryer(new Retryer.Default(5000, 5000, 3))
             .client(OK_HTTP_CLIENT);
}

第3步:封装api接口实现类

接下来,我们需要针对不同的api接口来实现对应的封装,比如我们这里针对如下登录接口进行封装:

#请求地址传两个参数-用户名和密码(JSON格式)
 http://localhost:8080/user/login

我们新建一个UserService接口,并新建对应的实现类UserServiceImpl其具体实现代码如下:
1)UserService接口

public interface UserService {
    /**
     * 登录接口
     */
    @RequestLine("POST /user/login")
    @Headers({"Content-Type: application/json;charset=UTF-8"})
    String login(String loginInfo);
}

2)UserServiceImpl实现类:

public class UserServiceImpl implements UserService {

    private String host;

    public UserServiceImpl(String host) {

        this.host = host;
    }

    /**
     * 登录实现
     */
    @Override
    public String login(String loginInfo) {

        UserService userService= OkHttpFeign.target(UserService.class, this.host);
        return userService.login(loginInfo);
    }

}

第4步:调用接口

接下来我们可以将封装好的项目打成sdk给其他项目引用,在其他项目中我们可以直接调用如下:

UserService userService = new UserServiceImpl("http://localhost:8080");
// 构建json格式字符串
JSONObject loginInfo = new JSONObject();
loginInfo.put("username","admin");
loginInfo.put("password","123456");
// 调用接口,获取响应
String result = userService.login(loginInfo.toJSONString());

到这里,我们就实现了OpenFeign的独立使用,可以实现对底层http的封装,来实现对远程api接口的调用。如果你不想每次都传输JSON对象格式的字符串,而是想直接传输实体类,那么可以将封装的OkHttpFeign修改为OkHttpJsonFeign,具体代码如下:

import feign.Feign.Builder;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;

public class OkHttpJsonFeign extends OkHttpFeign {
    private static final Builder BUILDER = build();
    private static final Encoder ENCODER = new JacksonEncoder();
    private static final Decoder DECODER = new JacksonDecoder();

    public OkHttpJsonFeign() {
    }

    public static Builder build() {
        return OkHttpFeign.build().encoder(ENCODER).decoder(DECODER);
    }

    public static <T> T target(Class<T> apiType, String host) {
        return BUILDER.target(apiType, host);
    }
}

然后使用OkHttpJsonFeign去调用就可以了,这样的定义Service中方法时,就可以直接使用对象作为参数和返回值。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/8088.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号