Spring RestTemplate 处理自定义状态码

Spring RestTemplate handle custom status code

我应该从我的应用程序调用一些服务,这些服务可以 return 异常的 http 状态代码,例如 230、240 等。默认错误处理程序我得到:

Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.UnknownHttpStatusCodeException: Unknown status code [230] null] with root cause...

当我使用自定义错误处理程序时,我可以避免这种情况:

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

        int status = response.getRawStatusCode();
        if (status >= 200 && status <= 299)
            return false;

        HttpStatus statusCode = response.getStatusCode();
        if (statusCode.is2xxSuccessful())
            return false;
        HttpStatus.Series series = statusCode.series();
        return (HttpStatus.Series.CLIENT_ERROR.equals(series)
                || HttpStatus.Series.SERVER_ERROR.equals(series));
    }

但是当 RestTmplate 尝试检索它时,它会陷入 MessageBodyClientHttpResponseWrapper 中的相同异常:

public boolean hasMessageBody() throws IOException {
        HttpStatus responseStatus = this.getStatusCode();
        if (responseStatus.is1xxInformational() || responseStatus == HttpStatus.NO_CONTENT ||
                responseStatus == HttpStatus.NOT_MODIFIED) {
            return false;
        }
        else if (this.getHeaders().getContentLength() == 0) {
            return false;
        }
        return true;
    }

如何正确获取响应正文?

最后,问题已在 Spring 5tested it 中解决。