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

相关推荐
yoyo_zzm1 分钟前
Laravel6.x新特性全解析
java·spring boot·后端
Nick_zcy13 分钟前
小说在线阅读网站和小说管理系统 · 功能全解析
java·后端·python·springboot·ruoyi
源码宝16 分钟前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理
qinqinzhang1 小时前
Java 中的 IoC、AOP、MVC
java
禾叙_1 小时前
【langchain4j】结构化输出(六)
java·开发语言
饭小猿人1 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
Advancer-2 小时前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯
\xin2 小时前
pikachu自编SQL(POST)
java·数据库·sql
一行代码一行诗++2 小时前
注释是什么和注释该怎么写(C语言)
java·前端·javascript
JAVA面经实录9172 小时前
企业级java+LangChain4j-RAG系统 限流熔断降级
java·开发语言·分布式·langchain