- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这与 Netflix Feign - Propagate Status and Exception through Microservices 类似的问题
我有带有 feign 和 hystrix 的微服务架构。我的问题是,当底层服务返回错误响应时 - 比如说状态 404
- 我的 FallbackFactory 应该传播它,但它总是返回 200
。
这是我的代码:
错误响应解码器:
@Component
public class ErrorResponseDecoder implements ErrorDecoder {
private ErrorDecoder delegate = new ErrorDecoder.Default();
@Override
public Exception decode(String methodKey, Response response) {
HttpHeaders responseHeaders = new HttpHeaders();
for(Map.Entry<String,Collection<String>> entry : response.headers().entrySet()) {
responseHeaders.put(entry.getKey(), new ArrayList<>(entry.getValue()));
}
HttpStatus statusCode = HttpStatus.valueOf(response.status());
String statusText = response.reason();
byte[] responseBody;
try {
responseBody = IOUtils.toByteArray(response.body().asInputStream());
} catch (IOException e) {
throw new RuntimeException("Failed to process response body.", e);
}
if (response.status() >= 400 && response.status() <= 499) {
return new HttpClientErrorException(statusCode, statusText, responseHeaders, responseBody, null);
}
if (response.status() >= 500 && response.status() <= 599) {
return new HttpServerErrorException(statusCode, statusText, responseHeaders, responseBody, null);
}
return delegate.decode(methodKey, response);
}
}
后备:
@Component
public class ServiceFallbackFactory implements FallbackFactory<ServiceFeign> {
@Override
public ServiceFeign create(final Throwable cause) {
return new ServiceFeign() {
@Override
public Response getList(String date) {
if(cause instanceof HttpStatusCodeException) {
HttpStatusCodeException exc = (HttpStatusCodeException)cause;
return Response.status(exc.getStatusCode().value()).entity(exc.getMessage()).build();
} else {
throw new RuntimeException(cause);
}
}
}
}
输出:
{
"statusType": "NOT_FOUND",
"entity": "404 Not Found",
"entityType": "java.lang.String",
"metadata": {},
"status": 404
}
HTTP 状态:200 :(我怎样才能让它也变成404?
最佳答案
首先 - 我不需要后备机制。
很可能 ResponseEntity
可以工作,但我没有尝试使用此解决方案。
关于java - Feign - 处理底层异常 - 传播错误状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510282/
有什么区别: spring-cloud-starter-openfeign ( https://github.com/spring-cloud/spring-cloud-openfeign ) 和 s
我们正在使用netflix feign来调用 Restful Web服务。对于补丁请求,看来不支持PATCH请求。 Caused by: feign.RetryableException: Inval
据我了解,当请求响应状态码!= 2xx 时,将调用 feign ErrorDecoder 的 decode() 方法。通过调试我的测试,我发现我的 CustomErrorDecoder 的 decod
我有一个像这样构建的假客户端服务: Feign.Builder builder = Feign.builder() .contract(new SpringMvcContract())
使用spring cloud feign调用我的服务,当服务返回401异常时,respose.body()一片空白。 当我抛出异常时 throw new BadRequestException(400
我使用 ErrorDecoder 返回正确的异常而不是 500 状态代码。 有没有办法在解码器中检索原始消息。我可以看到它在 FeignException 中,但不在 decode 方法中。我所拥有的
通过学习曲线,遇到了这个场景: 鉴于90%的调用都是JSON,在构建客户端时添加了GSON解码器。不过接口(interface)中有些方法调用应该是支持raw return without decod
我正在尝试使用以下 Feign 客户端在 Spring Boot 应用程序中检索在线图像内容。 @FeignClient(name = "image") public interface ImageC
我正在使用需要设置几个字段的 REST api。我的应用程序应始终将某些字段设置为相同的值。是否可以在带有 feign 定义(或其他地方)的界面中使这些值“硬编码”? 我的假声明看起来像这个例子。假设
我是新来的 Spring 和假装和探索几天以来。我能够向我们的 protected 资源(用户名/密码)发出身份验证请求,并在后续请求 header 中使用身份验证服务返回的 JWT token 。但
我尝试在我的 Spring Boot 应用程序上配置 OpenFeign,我使用 pokeapi 进行测试。 我编写了这段代码: @FeignClient(value = "pokeapi", url
快速浏览了Feign的源码,发现Feign使用的是JDK的HttpUrlConnection在不使用连接池的情况下发出 HTTP 请求并在请求完成时关闭它。我怀疑这种方式的效率。然后我看了Spring
我为 feignClients 启用了我的 spring 云,如下所示: @Configuration @EnableAutoConfiguration @RestController @Enable
当我发帖时 Map使用 Feign Client,我收到错误消息: feign.FeignException: status 400 reading MAp . 代码 //Client side @C
目录 使用HttpClient和OkHttp 使用HttpClient 使用OkHttp OpenFeign替换为OkHtt
需求 最近小编的项目中出现了很多feign 调用出现 Read Time out 的异常,但因为没有集成链路追踪的第三方框架,查不到原因。 所以想到打印请求的ip地址,判断是指定的服务器出现的问
我正在使用 spring feign 压缩请求和响应 服务器端: server: servlet: context-path: /api/v1/ compression: en
我面临以下情况,令我惊讶的是,我找不到太多文档:有一项服务仅通过一一获取项目详细信息来提供休息调用。总共有 1000 多个项目。 出于响应能力的原因,我想将这些数据保留在我的一端,而不是懒惰地获取它。
我正在尝试实现一个涉及 FeignClient 调用的单元测试,该调用应返回 404 Not Found。 由于 Feign 抛出了 404 异常,那么实现此测试用例的正确方法是什么? 我正在尝试这样
当使用spring-cloud-feign连接到本地主机时,Feign找不到url,而是给我以下错误消息。 2019-11-13 12:01:55.553 ERROR 23798 --- [n
我是一名优秀的程序员,十分优秀!