【问题标题】:how to get POST body from request during http exception handling?在 http 异常处理期间如何从请求中获取 POST 正文?
【发布时间】:2017-11-29 11:50:38
【问题描述】:

我有 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() 方法抛出另一个异常。结果客户得到 ​​p>

{
    "status": 400,
    "message": "Validation failed for object='x'. Error count: 1",
    "sessionId": "",
    "transactionId": "xxx",
    "errors": null
}

【问题讨论】:

    标签: java spring exception spring-boot microservices


    【解决方案1】:

    您不能再次调用 getReader。此链接解释了原因:resetting a HttpRequest after calling request.getReader()。如果它通过应用程序全局使用,您可以通过本地线程传递此信息。您需要确保适当地重置线程本地。您还可以捕获先前的异常,将其包装在自定义异常类中,并将此信息放入自定义异常中。然后,您可以抛出包含您需要的信息的自定义异常。

    【讨论】:

    • 谢谢,但我知道。询问了获取数据的方法,或者2 mkservice中抛出异常的方法,以便1可以得到有用的json数据
    • 请添加引发异常的代码。如果没有其他方法,您可以包装 httpservletrequest 并存储请求正文。
    • 标准@Valid注解抛出
    • 如果您使用的是spring mvc,请提供控制器中的代码,如果请求正在那里进行
    • bindingResult.rejectValue(secondFieldName, "无效值");春天造就了其他一切
    【解决方案2】:

    解决办法是实现ErrorDecoder接口并覆盖

    @Override
    Exception decode(String methodKey, Response response) {
        // response has getBody() method to get all data from a request 
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2018-05-10
      • 2010-12-08
      • 2020-06-24
      • 1970-01-01
      • 2020-02-23
      相关资源
      最近更新 更多