openfeign 返回void和ResponseEntity的区别

1. 方法返回 void

复制代码
@FeignClient(name = "service-name")
public interface MyClient {
    @PostMapping("/api/operation")
    void doOperation();
}
  • 当接口返回状态码不是 2xx 时,Feign 会抛出异常

  • 抛出的是 FeignException或其子类(如 FeignException.NotFound等)

2. 方法返回 ResponseEntity

复制代码
@FeignClient(name = "service-name")
public interface MyClient {
    @PostMapping("/api/operation")
    ResponseEntity<String> doOperation();
}
  • 无论接口返回什么状态码(200、400、404、500 等),Feign 都不会抛出异常

  • 调用方需要自己检查 ResponseEntity的状态码

  • 可以通过 responseEntity.getStatusCode()获取状态码

  • 可以通过 responseEntity.getBody()获取响应体

3. 示例对比

返回 void 的处理方式:

复制代码
try {
    myClient.doOperation();
} catch (FeignException e) {
    int status = e.status();
    String error = e.getMessage();
    // 处理异常
}

返回 ResponseEntity 的处理方式:

复制代码
ResponseEntity<String> response = myClient.doOperation();
if (!response.getStatusCode().is2xxSuccessful()) {
    int status = response.getStatusCodeValue();
    String body = response.getBody();
    // 处理非成功响应
}

4. 建议

  • 如果需要处理各种 HTTP 状态码,使用 ResponseEntity更灵活

  • 如果只关心成功情况,可以使用 void或自定义对象,让异常机制处理失败情况

  • 也可以通过配置 ErrorDecoder来自定义异常处理逻辑

相关推荐
C雨后彩虹14 小时前
ReentrantLock 源码解析:AQS 核心原理
java·reentrantlock·lock
董世昌4114 小时前
如何声明一个类?类如何继承?
java·开发语言·前端
企微自动化14 小时前
企业微信 API 开发:如何实现外部群消息主动推送
java·开发语言·spring
艾莉丝努力练剑14 小时前
【QT】初识QT:背景介绍
java·运维·数据库·人工智能·qt·安全·gui
糯诺诺米团14 小时前
C++多线程打包成so给JAVA后端(Ubuntu)<2>
java·开发语言·c++
一线大码14 小时前
后端分层架构规范和标准包结构
java·后端
南屿欣风14 小时前
Maven 聚合工程打包报错:Unable to find main class 快速解决
java·maven
洛_尘14 小时前
Java EE进阶7:Spring Boot 日志
java·spring boot·java-ee
耘田14 小时前
 macOS Launch Agent 定时任务实践指南
java·开发语言·macos