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来自定义异常处理逻辑

相关推荐
xcl09255 小时前
商超智能运营实战:数据驱动提升门店效率与体验指南
java·mfc·宠物
Flynt7 小时前
OpenJDK禁AI代码半年了,现在执行得怎么样?答案是:全靠自觉
java·开源·ai编程
古法安卓12 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding14 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng15 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛16 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko16 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772019 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang20 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing20 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员