我有2个微服务。其中1个向2发送请求,2个微服务器抛出异常并添加新的附加字段错误以响应有用数据:
public static class ErrorResponse {
private Integer status;
private String transactionId;
private String sessionId;
private String message;
private List<FieldError> errors;
//....setters/getters
}
{
"status": 400,
"message": "Validation failed for object='x'. Error count: 1",
"sessionId": "",
"transactionId": "xxx",
"errors": [
{
"codes": [
""
],
"arguments": null,
"defaultMessage": null,
"objectName": "",
"field": "",
"rejectedValue": 0,
"bindingFailure": false,
"code": "invalid value"
}
]
}
在1个微服务中我有一个全局异常处理程序,它在客户端发送它,但问题是我无法从 HttpServletRequest 中获取归档的错误。 getReader()方法抛出另一个异常。结果客户端获得
{
"status": 400,
"message": "Validation failed for object='x'. Error count: 1",
"sessionId": "",
"transactionId": "xxx",
"errors": null
}
答案 0 :(得分:0)
您无法再次调用getReader。此链接解释了原因:resetting a HttpRequest after calling request.getReader()。如果通过应用程序全局使用某些东西,您可以通过本地线程传递此信息。您需要确保适当地重置本地线程。您还可以捕获先前的异常,将其包装在自定义异常类中,并将此信息放在自定义异常中。然后,您可以抛出包含所需信息的自定义异常。
答案 1 :(得分:0)
解决方案是实现ErrorDecoder接口并覆盖
@Override
Exception decode(String methodKey, Response response) {
// response has getBody() method to get all data from a request
}