我有2个微服务。其中1个将请求发送给2,2微服务会引发异常,并将新的添加字段 errors 添加到使用有用数据的响应中:
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 中获取 errors 。getReader()方法引发了另一个异常。结果,客户获得了
{
"status": 400,
"message": "Validation failed for object='x'. Error count: 1",
"sessionId": "",
"transactionId": "xxx",
"errors": null
}
您无法第二次调用GetReader。此链接说明原因:调用request.getReader()后重置httprequest。如果该信息通过应用程序全局使用,则可以通过本地线程传递此信息。您需要确保适当地重置本地线程。您还可以捕获以前的异常,将其包裹在自定义类别中,然后将此信息放入您的自定义异常中。然后,您可以抛出具有所需信息的自定义异常。
解决方案是实现ErrordeCoder接口和覆盖
@Override
Exception decode(String methodKey, Response response) {
// response has getBody() method to get all data from a request
}