如何通过Feign实现针对第三方服务的HTTP请求调用?

2026-05-26 00:551阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1172个文字,预计阅读时间需要5分钟。

如何通过Feign实现针对第三方服务的HTTP请求调用?

目录 + Feign 调用的简单实现

1.默认模式,不使用配置类,适用于服务内部调用,非三方请求接口

2.自定义配置类

3.自定义配置类方法

4.@FeignClient 参数说明

5.自定义配置的简单实现

6.Feign

目录
  • Feign调用的简单实现
    • 1. 默认模式,不使用配置类,作用于服务内部调用而非三方请求接口
    • 2.自定义配置类
    • 3.自定义配置类法2
    • 4. @FeignClient参数说明
    • 5. 自定义配置的简单实现
    • 6. Feign 的其他请求方式

最近,在使用spring cloud框架时,发现feign也能实现三方请求,而且实现很简单,请求接口的结构很清晰,便果断学习一波。

记录一下。本次使用的依赖仅有openfeign。

Feign调用的简单实现

maven依赖

<!-- openfeign依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

Feign配置方式

feign有三种使用方式,前一种多是用于无需配置的微服务内部调用,后两者是用于自定义配置的三方调用或者内部微服务调用。

1. 默认模式,不使用配置类,作用于服务内部调用而非三方请求接口

这种情况下,如果不需要给注册中心的微服务添加额外的参数配置,那么可以不使用配置类,直接在yml配置打开feign开关即可。

此时默认使用SpringMVC契约模式。如下代码中,yml配置为用户中心的配置文件。

如果一个业务中心想要根据用户id查询用户信息,那么便可以直接根据用户中心的服务名定位,如UserService 类中的@FeignClient配置,注册中心会自动根据服务名寻址到用户中心的地址。

# 用户中心的服务名 spring: application: name: user-service # 注册中心 eureka: instance: prefer-ip-address: true hostname: localhost client: service-url: defaultZone: localhost:8080/eureka/ # feign feign: api.apiopen.top

C. 正式使用,feign无参数GET方式 请求三方接口

该部分的测试接口都是基于开源社区的测试接口。使用很久了,再次感谢一下开源社区大佬们的幸苦付出。现在有好多接口都用不了。希望大家不要恶意刷接口。

请求方式:GET

请求地址:api.apiopen.top/getSingleJoke

方法上使用的注解是feign契约(Contract)RequestLine。要使用Spring契约 GetMapping 等注解时,需要在FeignConfig中配置即可。

ApiService类代码如下:

@FeignClient(value = "api-service", url = "${api.url}" , fallback = ApiServiceHystrix.class, configuration = FeignConfig.class) public interface ApiService { /** * 平台接口预览 方法名可以随便取 */ @RequestLine("GET /getAllUrl") List<String> getAllUrl(); }

ApiServiceHystrix类代码:

public class ApiServiceHystrix implements ApiService { @Override public List<String> getAllUrl() { // 设置调用失败时的降级处理 return null; } }

调用写好的接口,查看参数:

调用成功!Feign的基础调用很简单,如果需要调用多个相同地址的第三方请求,只需要新增方法即可,无需再增加额外的配置。

但仅仅用于单次调用时,feign比起其他HTTP请求方式又稍显麻烦,不过胜在简洁明了。

如何通过Feign实现针对第三方服务的HTTP请求调用?

6. Feign 的其他请求方式

  • Query参数

请求方式:POST

请求地址:api.apiopen.top/getImages

现在尝试用feign来进行Query请求。请求成功后,用于接收数据的对象可以是一个Java 对象类,也可以是JSONObject对象。当返回内容结构稳定时(成功失败所返回的数据格式相同时),Java对象才能准确接收到信息。

创建一个结果类:

@Data public class ApiResult implements Serializable { private static final long serialVersionUID = 1L; private Integer code; private String message; private List result; }

ApiService类中增加对应方法:

@RequestLine("POST /getImages?page={page}&count={count}") ApiResult getImages(@Param("page") String page, @Param("count") String count);

请求结果:

  • POST表单

post表单请求发送时,请求参数要为Map类型的键值对。示例代码:

@RequestLine("POST /deleteFeedback") ApiResult deleteFeedback(@RequestBody Map<String, ?> bodyMap);

  • 设置Header请求头

请求头可以通过feign注解 @HeaderMap(import feign.HeaderMap;)示例代码:

@RequestLine("POST /requestHeader") JSONObject getTcText(@HeaderMap Map<String, Object> headers, @RequestBody Map<String, Object> map);

其他请求可移步git:open-feign

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

本文共计1172个文字,预计阅读时间需要5分钟。

如何通过Feign实现针对第三方服务的HTTP请求调用?

目录 + Feign 调用的简单实现

1.默认模式,不使用配置类,适用于服务内部调用,非三方请求接口

2.自定义配置类

3.自定义配置类方法

4.@FeignClient 参数说明

5.自定义配置的简单实现

6.Feign

目录
  • Feign调用的简单实现
    • 1. 默认模式,不使用配置类,作用于服务内部调用而非三方请求接口
    • 2.自定义配置类
    • 3.自定义配置类法2
    • 4. @FeignClient参数说明
    • 5. 自定义配置的简单实现
    • 6. Feign 的其他请求方式

最近,在使用spring cloud框架时,发现feign也能实现三方请求,而且实现很简单,请求接口的结构很清晰,便果断学习一波。

记录一下。本次使用的依赖仅有openfeign。

Feign调用的简单实现

maven依赖

<!-- openfeign依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

Feign配置方式

feign有三种使用方式,前一种多是用于无需配置的微服务内部调用,后两者是用于自定义配置的三方调用或者内部微服务调用。

1. 默认模式,不使用配置类,作用于服务内部调用而非三方请求接口

这种情况下,如果不需要给注册中心的微服务添加额外的参数配置,那么可以不使用配置类,直接在yml配置打开feign开关即可。

此时默认使用SpringMVC契约模式。如下代码中,yml配置为用户中心的配置文件。

如果一个业务中心想要根据用户id查询用户信息,那么便可以直接根据用户中心的服务名定位,如UserService 类中的@FeignClient配置,注册中心会自动根据服务名寻址到用户中心的地址。

# 用户中心的服务名 spring: application: name: user-service # 注册中心 eureka: instance: prefer-ip-address: true hostname: localhost client: service-url: defaultZone: localhost:8080/eureka/ # feign feign: api.apiopen.top

C. 正式使用,feign无参数GET方式 请求三方接口

该部分的测试接口都是基于开源社区的测试接口。使用很久了,再次感谢一下开源社区大佬们的幸苦付出。现在有好多接口都用不了。希望大家不要恶意刷接口。

请求方式:GET

请求地址:api.apiopen.top/getSingleJoke

方法上使用的注解是feign契约(Contract)RequestLine。要使用Spring契约 GetMapping 等注解时,需要在FeignConfig中配置即可。

ApiService类代码如下:

@FeignClient(value = "api-service", url = "${api.url}" , fallback = ApiServiceHystrix.class, configuration = FeignConfig.class) public interface ApiService { /** * 平台接口预览 方法名可以随便取 */ @RequestLine("GET /getAllUrl") List<String> getAllUrl(); }

ApiServiceHystrix类代码:

public class ApiServiceHystrix implements ApiService { @Override public List<String> getAllUrl() { // 设置调用失败时的降级处理 return null; } }

调用写好的接口,查看参数:

调用成功!Feign的基础调用很简单,如果需要调用多个相同地址的第三方请求,只需要新增方法即可,无需再增加额外的配置。

但仅仅用于单次调用时,feign比起其他HTTP请求方式又稍显麻烦,不过胜在简洁明了。

如何通过Feign实现针对第三方服务的HTTP请求调用?

6. Feign 的其他请求方式

  • Query参数

请求方式:POST

请求地址:api.apiopen.top/getImages

现在尝试用feign来进行Query请求。请求成功后,用于接收数据的对象可以是一个Java 对象类,也可以是JSONObject对象。当返回内容结构稳定时(成功失败所返回的数据格式相同时),Java对象才能准确接收到信息。

创建一个结果类:

@Data public class ApiResult implements Serializable { private static final long serialVersionUID = 1L; private Integer code; private String message; private List result; }

ApiService类中增加对应方法:

@RequestLine("POST /getImages?page={page}&count={count}") ApiResult getImages(@Param("page") String page, @Param("count") String count);

请求结果:

  • POST表单

post表单请求发送时,请求参数要为Map类型的键值对。示例代码:

@RequestLine("POST /deleteFeedback") ApiResult deleteFeedback(@RequestBody Map<String, ?> bodyMap);

  • 设置Header请求头

请求头可以通过feign注解 @HeaderMap(import feign.HeaderMap;)示例代码:

@RequestLine("POST /requestHeader") JSONObject getTcText(@HeaderMap Map<String, Object> headers, @RequestBody Map<String, Object> map);

其他请求可移步git:open-feign

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。