当前位置:首页 > 技术分析 > 正文内容

Spring Boot中使用OpenFeign实现第三方接口的封装调用?

ruisui883个月前 (02-03)技术分析23

在SpringBoot项目开发过程中,可能或多或少的会涉及到第三方接口的调用,并且在SpringBoot框架中也提供了很多的支持第三方接口调用的方式。但是在这些实现技术中,唯独使用OpenFeign来实现对第三方接口的封装调用,大大的简化HTTP客户端的编写。

OpenFeign是一个声明式的HTTP客户端,在开发中可以通过简单的注解就可以完成HTTP请求的定义和调用。这样在一定程度上就减少了手动去处理HTTP请求和响应的工作量,比起其他的实现来看真的是简单了不少。

下面我们就来看看如何在SpringBoot中使用OpenFeign来实现第三方接口的调用。

添加依赖

要想使用OpenFeign的功能,就必须要引入OpenFeign的依赖,如下所示。


org.springframework.cloud
spring-cloud-starter-openfeign

同时OpenFeign是Spring Cloud中的组件所以需要确保在项目中添加了Spring Cloud相关的版本依赖。当然也可以单独进行依赖。二者不冲突。如下所示。需要选择合适的Spring Cloud 的版本。


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.SR10 
            pom
            import
        
    

启用Feign

依赖引入完成之后,接下来就是配置Spring Boot的主启动类,要想使用OpenFeign,就需要在SpringBoot的启动类上添加@EnableFeignClients注解以启用Feign,如下所示。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

定义Feign客户端接口

接下来就是通过@FeignClient注解来创建一个用于第三方调用的接口,如下所示。

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "thirdPartyApi", url = "https://api.example.com")
public interface ThirdPartyApiClient {

    @GetMapping("/endpoint")
    String getEndpointData(@RequestParam("param") String param);
}

@FeignClient这个注解就是用来声明Feign的客户端。在这个注解中通过url指定了第三方API的基本URL。而在下面的方法中通过@GetMapping注解用于指定请求的HTTP方法和路径。就可以实现对第三方接口的调用。

使用Feign客户端

接下来就是在Service层调用注入的第三方接口客户端来进行调用,如下所示。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ApiService {

    @Autowired
    private ThirdPartyApiClient thirdPartyApiClient;

    public String fetchData(String param) {
        return thirdPartyApiClient.getEndpointData(param);
    }
}

更多配置(可选)

当然除了上面设置的内容之外,还可以创建一些自定义的配置项,例如对于超时时间、重试策略等的配置,而这些配置就需要另外的配置文件,如下所示。

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

创建完成之后,就可以在@FeignClient注解中引用这个配置,通过这个配置就可以对第三方调用的接口请求进行配置了。

@FeignClient(name = "thirdPartyApi", url = "https://api.example.com", configuration = FeignConfig.class)
public interface ThirdPartyApiClient {
    // 方法定义
}

总结

通过上面的实现步骤,就可以通过OpenFeign来封装和调用第三方接口了,然后就可以在SpringBoot项目中引用相关的配置服务,这个配置服务可以像是调用本地的逻辑实现一样。让HTTP客户端的开发变得更加便捷和高效。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1181.html

标签: feign 使用
分享给朋友:

“Spring Boot中使用OpenFeign实现第三方接口的封装调用?” 的相关文章

Beta版Linux Mint“Xia”发行版22.1发布

IT之家 12 月 13 日消息,Beta 版 Linux Mint“Xia” 22.1 昨日(12 月 12 日)发布,新版本基于 Ubuntu 24.04,内核版本为 Linux 6.8,长期支持将持续到 2029 年,为用户提供可靠稳定的使用体验。新版本在软件包管理方面,主要弃用了传统的 ap...

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中存放数据 ms。 ②将父组件 data 中的数据 ms 绑定到子组件中的属性 ms。 ③子组件在 p...

vue3父子组件传对象,子组件访问修改父组件对象中的属性值

在Vue 3中,父子组件之间的数据传输通常通过props和emit进行。父组件可以通过props向下传递数据给子组件,子组件则可以通过emit向上通知父组件更新数据。如果需要在子组件中修改父组件对象中的属性值,可以使用一个名为ref的Vue 3新特性。以下是一个示例,演示了如何在Vue 3中实现父子...

GitLab 14.6发布,优化Geo高可用,安全更新等

昨天,GitLab官方按照管理发布了有一个月度版本GitLab 14.6的发布,这也是本年度收官版本。14.6中在安全合规性方面,在Geo方面以及MD代码块一键复制等方便做了优化,另外还在UI图标方面发布了一套全新的图标。详细情况请和虫虫一起学习。GitLab 14.6主要改进使用 Geo 实现无缝...

jvm疯狂吃内存,到底是谁的锅?

jvm应该是每一个java程序员都需要掌握的内容,但是在没有遇到问题之前,很多都是基于理论的,唯有实战才能增加个人的知识储备。本文是从一个角度来分析是谁在狂吃内存,希望对你有所帮助。本文是易观技术人员注意到一台开发机上各个微服务进程占用内存很高,随即便展开了调查......ps:本文来源于:http...

Vue学习笔记之动态路由的参数传递应用及技巧

路由的参数传递:①通过params的类型· 配置路由格式:/router/:id· 传递的方式:在path后面跟上对应的值· 传递后形成的路径:/router/list,/router/profile这个就是前两篇中提到的"动态路由"中有应用过这个方法:②通过query的类型(对象方...