没有响应对象的Spring ResponseErrorHandler

时间:2018-09-17 08:00:33

标签: java spring http resttemplate

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

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

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

restTemplate.errorHandler(new MyCustomErrorHandler());

我也重写了hasError()方法,但是在内部我必须解析该对象以检查它是否包含有错误的字段...

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

1 个答案:

答案 0 :(得分:1)

仅当返回错误状态时才会调用错误处理程序,200不是错误状态,因此不会对其进行处理。

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

public class MyCustomErrorHandler implements ResponseErrorHandler {

@Override
public boolean hasError(ClientHttpResponse httpResponse) 
        throws IOException {

    //TODO check your criteria for error
}