SpringBoot项目通过Feign调用三方接口的详细教程
一、环境准备
创建Spring Boot项目
使用Spring Initializr生成项目,选择依赖:
Spring WebOpenFeign
pom.xml依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.3</version> <!-- 与Spring Boot版本匹配 -->
</dependency>
</dependencies>
二、启用Feign客户端
在启动类添加注解:
@SpringBootApplication
@EnableFeignClients // 关键注解
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
三、定义Feign客户端接口
创建接口声明第三方API调用:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(
name = "thirdPartyApi",
url = "https://api.example.com" // 第三方接口基地址
)
public interface ThirdPartyClient {
// 示例:GET请求
@GetMapping("/users/{id}")
UserResponse getUser(@PathVariable("id") Long userId);
// 示例:POST请求
@PostMapping("/orders")
OrderResponse createOrder(@RequestBody OrderRequest request);
}
四、定义请求/响应DTO
// 请求示例
public class OrderRequest {
private String productId;
private Integer quantity;
// getters/setters
}
// 响应示例
public class UserResponse {
private Long id;
private String name;
private String email;
// getters/setters
}
五、调用Feign客户端
在Service中注入并使用:
@Service
public class ApiService {
@Autowired
private ThirdPartyClient thirdPartyClient; // 注入Feign客户端
public UserResponse fetchUser(Long userId) {
return thirdPartyClient.getUser(userId); // 调用第三方API
}
public void createNewOrder(OrderRequest request) {
OrderResponse response = thirdPartyClient.createOrder(request);
System.out.println("Order created: " + response.getOrderId());
}
}
六、高级配置
1. 添加请求头(如认证)
@FeignClient(name = "authApi", url = "https://api.example.com")
public interface AuthClient {
@GetMapping("/profile")
ProfileResponse getProfile(
@RequestHeader("Authorization") String token // 动态传递Header
);
}
2. 超时配置(application.yml)
feign:
client:
config:
default:
connectTimeout: 5000 # 连接超时(ms)
readTimeout: 10000 # 读取超时(ms)
3. 日志配置
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL; // 输出完整请求日志
}
}
在application.yml启用日志:
logging:
level:
com.example.demo.client.ThirdPartyClient: DEBUG
七、错误处理
自定义错误解码器
public class CustomErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
if (response.status() == 404) {
return new ResourceNotFoundException("API resource not found");
}
return new FeignException.BadRequest("API request failed");
}
}
在配置类注册:
@Bean
public ErrorDecoder errorDecoder() {
return new CustomErrorDecoder();
}
八、测试调用
@RestController
public class DemoController {
@Autowired
private ApiService apiService;
@GetMapping("/user/{id}")
public UserResponse getUser(@PathVariable Long id) {
return apiService.fetchUser(id);
}
}
常见问题解决
404错误
- 检查第三方URL是否正确
- 确认接口路径是否包含上下文路径(如
/api/v1)
超时问题
调整配置:ribbon: ConnectTimeout: 3000 ReadTimeout: 60000
JSON解析错误
确保DTO字段名与JSON属性名匹配,或使用@JsonProperty注解启用GZIP压缩(提升性能)
feign: compression: request: enabled: true response: enabled: true
提示:实际调用前建议使用Postman测试第三方接口可用性。
到此这篇关于SpringBoot项目通过Feign调用三方接口的详细教程的文章就介绍到这了,更多相关SpringBoot Feign调用三方接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot使用maven指定依赖包的版本(解决示例)
我们在使用A依赖的时候,这个依赖有引入了第三方B依赖,这时候我想指定B依赖的版本号,下面个大家分享解决示例,对SpringBoot maven依赖包相关配置方法感兴趣的朋友一起看看吧2024-04-04
深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)
通常来讲,重构是指不改变功能的情况下优化代码,但本文所说的重构也包括了添加功能。这篇文章主要介绍了重构Mybatis与Spring集成的SqlSessionFactoryBean(上)的相关资料,需要的朋友可以参考下2016-11-11
Java中SpringSecurity密码错误5次锁定用户的实现方法
这篇文章主要介绍了Java中SpringSecurity密码错误5次锁定用户的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下2017-03-03
JSON的String字符串与Java的List列表对象的相互转换
这篇文章主要介绍了JSON的String字符串与Java的List列表对象的相互转换,如果在浏览器端JSON是list则转为string结构来处理,需要的朋友可以参考下2016-04-04


最新评论