如何基于伪装而引发异常。响应?

问题描述 投票:0回答:1

我有一个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;
}
java response spring-cloud-feign feign
1个回答
0
投票

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

这可以在try / catch块中捕获(或者如果想要更复杂的话,可以在Feign ErrorDecoder中捕获,但这是另一篇文章)。

但是,如果将错误响应映射到Feign.Response返回类型,则不是这种情况-请参见this Github issue

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

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

© www.soinside.com 2019 - 2024. All rights reserved.