如何在http异常处理期间从请求中获取POST正文?

时间:2017-11-29 11:50:38

标签: java spring exception spring-boot microservices

我有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
}

2 个答案:

答案 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 
}