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

相关推荐
张柏慈5 小时前
Java性能优化:实战技巧与案例解析
java
天“码”行空5 小时前
简化Lambda——方法引用
java·开发语言
带刺的坐椅6 小时前
MCP 进化:让静态 Tool 进化为具备“上下文感知”的远程 Skills
java·ai·llm·agent·solon·mcp·tool-call·skills
java1234_小锋6 小时前
Java线程之间是如何通信的?
java·开发语言
张张努力变强6 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
while(1){yan}7 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
毕设源码-赖学姐7 小时前
【开题答辩全过程】以 高校社团管理平台为例,包含答辩的问题和答案
java
余瑜鱼鱼鱼8 小时前
线程和进程的区别和联系
java·开发语言·jvm
小唐同学爱学习8 小时前
如何解决海量数据存储
java·数据库·spring boot·mysql
962464i8 小时前
SBE(simple-binary-encoding)-Demo
java