【问题标题】:Spring ResponseErrorHandler without parsing objectsSpring ResponseErrorHandler 不解析对象
【发布时间】:2018-09-17 08:00:33
【问题描述】:

我正在使用带有RestTemplate 的SpringBoot 与另一个应用程序进行通信。但是,我无法更改其 API,并且此外部服务始终返回 200OK 返回代码。

默认情况下,我们有ResponseErrorHandler 对所有4xx5xx 响应代码作出反应,但在我的情况下,当出现异常时,我会得到200OK 和一个JSON 字段errors

我创建了一个自定义错误处理程序,并使用以下方法将其捆绑到我的 rest 模板中:

restTemplate.errorHandler(new MyCustomErrorHandler());

我还覆盖了hasError() 方法,但在内部我必须解析这个对象以检查它是否包含有错误的字段...

这是处理错误的好方法吗?我应该两次解析响应吗?我为此类问题寻求干净的解决方案,但我想避免每次使用外部服务时都解析两次消息

【问题讨论】:

    标签: java spring http resttemplate


    【解决方案1】:

    只有在返回错误状态时才会调用错误处理程序,200 不是错误状态,因此不进行处理。

    您可以通过重写 hasError 方法 ResponseErrorHandler 来更改此行为,以检查错误消息或任何错误指示。

    public class MyCustomErrorHandler implements ResponseErrorHandler {
    
    @Override
    public boolean hasError(ClientHttpResponse httpResponse) 
            throws IOException {
    
        //TODO check your criteria for error
    }
    

    【讨论】:

    • 我确实做到了,但是在 hasError 内部,我必须解析对 Json 对象的整个响应才能检查错误字段。我忘记提了。感谢您指出这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2019-08-08
    • 2011-04-24
    相关资源
    最近更新 更多