我已经实现了自定义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的响应主体。
当服务返回404时,为什么假设请求的响应主体为空? 有没有办法获得响应机构?
我刚刚开始假装工作,所以如果我的问题不清楚,请告诉我,我会尽量澄清遗漏的内容。
提前致谢!
答案 0 :(得分:0)
好的,我刚刚发现为什么回答是空的。这不是我的错误。
由于我使用JacksonDecoder,如果响应状态为404,由于JacksonDecoder中的以下代码,我得到一个空响应。
..
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);
}
}
}
现在一切正常:)