Netflix Feign:404 上的 ErrorDecoder 中的响应主体为空
Netflix Feign: Response Body empty in ErrorDecoder on 404
我已经实现了自定义 ErrorDecoder:
public class WebShopErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
JacksonDecoder jacksonDecoder = new JacksonDecoder();
try {
ErrorResource error = (ErrorResource) jacksonDecoder.decode(response, ErrorResource.class);
return new EShopRequestException(error, HttpStatus.valueOf(response.status()));
} catch (IOException e) {
return new EShopRequestException(new ErrorResource("error.internal", "Internal server error"),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
我想用这个WebShopErrorDecoder
实现的是转发错误响应。
我的问题是,如果响应状态为 404,则 ErrorResource error
为空。
如果我将返回的响应状态更改为 400,例如错误资源包含响应。
当直接通过浏览器请求消费服务时,我可以看到响应状态为 404 的响应主体。
为什么服务returns404时feign请求的响应体为空?
有没有办法获取响应正文?
我刚开始使用 feign,所以如果我的问题不清楚,请告诉我,我会尽量澄清遗漏的内容。
提前致谢!
好的,我刚刚发现为什么响应是空的。不是装错是我的。
自从我使用 JacksonDecoder 以来,如果由于 JacksonDecoder 中的以下代码,响应状态为 404,我总是得到一个空响应。
..
public Object decode(Response response, Type type) throws IOException {
if(response.status() == 404) {
return Util.emptyValueOf(type);
}
..
我正在做的是使用 ResponseEntityDecoder
.
public class WebShopErrorDecoder implements ErrorDecoder {
private final ResponseEntityDecoder decoder;
public WebShopErrorDecoder(ResponseEntityDecoder decoder) {
this.decoder = decoder;
}
@Override
public Exception decode(String methodKey, Response response) {
try {
ErrorResource error = (ErrorResource) decoder.decode(response, ErrorResource.class);
return new EShopRequestException(error, HttpStatus.valueOf(response.status()));
} catch (IOException e) {
return new EShopRequestException(new ErrorResource("error.internal", "Internal server error"),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
现在一切正常:)
我已经实现了自定义 ErrorDecoder:
public class WebShopErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
JacksonDecoder jacksonDecoder = new JacksonDecoder();
try {
ErrorResource error = (ErrorResource) jacksonDecoder.decode(response, ErrorResource.class);
return new EShopRequestException(error, HttpStatus.valueOf(response.status()));
} catch (IOException e) {
return new EShopRequestException(new ErrorResource("error.internal", "Internal server error"),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
我想用这个WebShopErrorDecoder
实现的是转发错误响应。
我的问题是,如果响应状态为 404,则 ErrorResource error
为空。
如果我将返回的响应状态更改为 400,例如错误资源包含响应。
当直接通过浏览器请求消费服务时,我可以看到响应状态为 404 的响应主体。
为什么服务returns404时feign请求的响应体为空? 有没有办法获取响应正文?
我刚开始使用 feign,所以如果我的问题不清楚,请告诉我,我会尽量澄清遗漏的内容。
提前致谢!
好的,我刚刚发现为什么响应是空的。不是装错是我的。
自从我使用 JacksonDecoder 以来,如果由于 JacksonDecoder 中的以下代码,响应状态为 404,我总是得到一个空响应。
..
public Object decode(Response response, Type type) throws IOException {
if(response.status() == 404) {
return Util.emptyValueOf(type);
}
..
我正在做的是使用 ResponseEntityDecoder
.
public class WebShopErrorDecoder implements ErrorDecoder {
private final ResponseEntityDecoder decoder;
public WebShopErrorDecoder(ResponseEntityDecoder decoder) {
this.decoder = decoder;
}
@Override
public Exception decode(String methodKey, Response response) {
try {
ErrorResource error = (ErrorResource) decoder.decode(response, ErrorResource.class);
return new EShopRequestException(error, HttpStatus.valueOf(response.status()));
} catch (IOException e) {
return new EShopRequestException(new ErrorResource("error.internal", "Internal server error"),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
现在一切正常:)