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

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

ruisui885个月前 (02-03)技术分析49

开发的系统服务中,我们常常需要同许多第三方接口进行对接集成。使用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 实现第三方接口调用” 的相关文章

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

Gitlab之间进行同步备份

目前,我们公司有两个研发团队,分别在北京和武汉,考虑到访问速度的问题,原有武汉的研发环境在近端部署。也就是北京和武汉分别有两套独立的研发管理环境,虽然这解决了近端访问速度的问题,但是管理上较为分散,比如研发环境备份和恢复就是最重要的问题之一。最近,处于对安全性和合规性的考虑,希望将北京和武汉的源代码...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

html5+css3做的响应式企业网站前端源码

大家好,今天给大家介绍一款,html5+css3做的响应式企业网站前端源码 (图1)。送给大家哦,获取方式在本文末尾。首页banner幻灯片切换特效(图2)首页布局简约合理(图3)关于我们页面(图4)商品列表(图5)商品详情(图6)服务介绍(图7)新闻列表(图8)联系我们(图9)源码完整,需要的朋友...