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

Spring Boot + Feign 实现第三方接口调用

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

开发的系统服务中,我们常常需要同许多第三方接口进行对接集成。使用Feign可以更简单地实现HTTP调用,尤其是集成第三方API时。

1. 添加依赖

首先,在pom.xml中添加Feign的依赖:



    io.github.openfeign
    feign-core
    11.0


    io.github.openfeign
    feign-jackson
    11.0


    io.github.openfeign
    feign-spring4
    11.0

然后,在application.yml中配置Feign相关信息:

feign:
	client:
		config:
			default:
				loggerLevel: full //生产环境中,建议调整为basic或none,以避免日志过多
        connectTimeout: 5000
        readTimeout: 5000

2. 开启Feign功能

在Spring Boot的启动类中,使用@EnableFeignClients注解来启用Feign功能:

@SpringBootApplication
@EnableFeignClients // 开启 Feign 功能
public class FeignApplication {
		public static void main(String[] args) {
    		SpringApplication.run(FeignApplication.class, args);
		}
}

3. 创建Feign客户端接口

接下来,创建一个Feign客户端接口来定义与第三方接口的交互方式。例如,我们需要调用一个视频详情查询的API:

public interface VideoFeignClient {
    @GetMapping(consumes = "application/json")
    VideoResult getVideoDetail(@RequestParam("videoId") Long videoId);
}

在这个接口中,@GetMapping表示HTTP GET请求,@RequestParam用于传递请求参数。

4. feign客户端工厂类

为了灵活地创建Feign客户端实例,可以使用工厂模式。通过Feign.Builder动态生成Feign客户端实例:

@Component
public class FeignClientFactory {
    @Resource
    private Feign.Builder feignBuilder;

    public VideoFeignClient createVideoFeignClient(String url) {
    		return feignBuilder.target(VideoFeignClient.class, url);
    }
}

5. 创建响应对象

定义一个响应对象类VideoResult来接收API的返回结果:

@Schema(description = "分页结果")
@Data
public class VideoResult implements Serializable {
    @Schema(description = "错误码", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer code;
    
  	@Schema(description = "错误提示", requiredMode = Schema.RequiredMode.REQUIRED)
    private String msg;
    
  	@Schema(description = "视频列表", requiredMode = Schema.RequiredMode.REQUIRED)
    private T data;
    
  	public VideoResult() {
    }
    
  	public VideoResult(T data) {
      this.data = data;
    }
}

定义视频详情实体类,接受第三方接口返回的视频详情信息:

@Data
public class VideoDetailRespVO {
    @Schema(description = "视频id", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long vodId;
    
  	@Schema(description = "分类id", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer typeId;
    
  	@Schema(description = "视频名称", requiredMode = Schema.RequiredMode.REQUIRED)
    private String vodName;
    
  	@Schema(description = "副标题", requiredMode = Schema.RequiredMode.REQUIRED)
    private String vodSub;
    
  	@Schema(description = "英文名称", requiredMode = Schema.RequiredMode.REQUIRED)
    private String vodEn;

    // ....更多属性
}

6. 使用Feign客户端

在服务层,注入Feign客户端并调用第三方接口:

@Service
public class VideoService {
    @Resource
    private FeignClientFactory feignClientFactory;
    
  	public VideoResult getVideoDetail(Long videoId) {
      // 可以从数据库配置中获取第三方接口的访问地址
      String url = 获取第三方的访问地址;
      VideoFeignClient videoFeignClient = feignClientFactory.createVideoFeignClient(url);
      return videoFeignClient.getVideoDetail(videoId);
    }
}

在Controller中调用该服务方法:

@RestController
@RequestMapping("/video")
public class VideoController {
    @Autowired
    private VideoService videoService;
    
  	@GetMapping
    public VideoResult getVideoDetail(@RequestParam Long videoId) {
        return videoService.getVideoDetail(videoId);
    }
}

6. 流程图

以下是调用流程的简要图示:

7. 总结

使用Spring Boot结合Feign,可以非常方便地实现与第三方接口的集成。通过声明一个 Feign 客户端接口,并通过 @FeignClient 注解与第三方服务进行集成,我们可以快速实现 HTTP 请求的调用,而无需手动编写复杂的 RestTemplate 或 HttpURLConnection 代码。

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

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

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

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

“Spring Boot + Feign 实现第三方接口调用” 的相关文章

2024年,不断突破的一年

迈凯伦F1车队不久前拿下了2024年度总冠军,距离上一次还是二十几年前。在此期间,另一领域内,一个充满革新活力的腕表品牌——RICHARD MILLE理查米尔,正不断发展,与F1运动、帆船、古董车展等领域,共享着对速度与极限的无尽向往。RICHARD MILLE的发展与F1车手们在赛道上的卓越表现交...

Excel中的FILTER函数详细介绍及使用示例

在Excel中处理大量数据时,经常需要根据特定条件筛选出符合条件的数据行或列。这正是Excel的FILTER函数发挥作用的地方。FILTER函数是Excel中一个非常强大的工具,它可以基于一个或多个条件动态地过滤数据,使数据分析和报告制作变得更加高效和准确。本文将详细介绍FILTER函数的用法,并提...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

关于Vue页面跳转传参,参数不同, 但页面只获取参数一次的问题

#头条创作挑战赛#1.问题描述问题描述: element 展示表格(页面A),点击表格的每一行的查看详情按钮,可以携带此行的信息参数跳转到另一个页面(页面B),但是从A页面到B页面,只有第一次跳转的时候B页面可以获取到A页面的参数,返回再次A->B ,B页面无法获取到参数。2.解决办法:方法一...

Vue Router 4 路由操作 - 路由导航

路由导航分为 声明式导航 和 编程式导航。通过 <router-link to="..."> 标签跳转的方式为声明式导航。通过 路由实例对象(router.push(...))跳转的为编程式导航。导航到不同的位置想要导航到不同的URL,使用 router.push 方法。...

thinkphp8+vue3微信小程序商城,发布公众号App+SAAS+多商户

项目介绍三勾小程序商城基于thinkphp8+vue3+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。支持主题色+自定义头部导航+自定义...