java - 如何根据feign.Response抛出异常?

标签 java response spring-cloud-feign feign

我有一个 Feign 客户端,其方法返回 feign.Response 类。当另一个服务抛出异常时,feign 会在响应正文中放置异常消息并放置状态,但我的服务不会抛出异常。我可以根据收到的响应抛出异常,就像使用 ResponseEntity 时一样。

假客户端

@FeignClient(name = "ms-filestorage")
@RequestMapping(value = "/files", produces = "application/json")
public interface FileStorageApi {

    @GetMapping(value = "/{id}")
    Response getFileById(@PathVariable String id);
}

客户端的使用

@Override
public Response getFileFromStorage(String fileId) {
    Response fileStorageResponse = fileStorageApi.getFileById(fileId);

    // NOW I USE THIS WAY FOR CHECKING RESPONSE BUT IT DOESN'T LOOK GOOD
    //if (fileStorageResponse.status() != HttpStatus.OK.value()) {
    //    throw new OsagoServiceException();
    //}
    return fileStorageResponse;
}

最佳答案

通常,如果 Feign 客户端调用从其所调用的 API 接收到错误响应,则会抛出 FeignException

这可以在 try/catch block 中捕获(如果您想更复杂,则可以在 Feign ErrorDecoder 中捕获,但那是另一篇文章了)。

但是,如果将错误响应映射到 Feign.Response 返回类型,则情况并非如此 - 请参阅 this Github issue

您应该创建一个自定义 Java 对象来保存响应,而不是从 getFileFromStorage() 返回 Feign.Response,然后您就可以访问 FeignException 您可以根据需要进行处理。

请注意,如果您不需要访问从正在调用的 API 返回的数据,将返回类型更改为 void 也可以解决此问题。

关于java - 如何根据feign.Response抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852486/

相关文章:

ajax 获取响应错误信息

java - 让 Feign 客户端从自定义属性中获取信任库

spring-cloud - 当实例关闭并转发到其他可用实例时,Spring Cloud Zuul 重试

netflix-feign - 启用 Sleuth 会减慢请求速度(很多)

java - Grails - 项目构建系统

java - 如何防止单击 <h :commandLInk> 时页面刷新

Java奇怪的行为: Program cancels but no Exception is thrown

javascript - 响应式图像 - 在不同的屏幕尺寸上调整图像大小

spring-boot - 在 Spring Boot 中发送多部分响应

java - 从 Java 将输入发送到 PHP 屏幕