本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/08/25/spring-rest-operations-error-handle/
Spring提供了RestOperations来方便支持rest api的使用。不仅对于常用的方法语义有支持,对于常用的错误处理也有考虑,简单来说,用起来方便顺手,如果是返回json等常见格式,也能自动转为Java对象。
RestOperations的默认错误处理由DefaultResponseErrorHandler负责,其中的方法hasError的返回值决定了是否将当前返回作为错误来对待。默认的实现是
protected boolean hasError(HttpStatus statusCode) { return (statusCode.series() == HttpStatus.Series.CLIENT_ERROR || statusCode.series() == HttpStatus.Series.SERVER_ERROR); }
也就是说4和5开头的状态码看作错误。然后在直接将返回内容封装一下抛出
@Override public void handleError(ClientHttpResponse response) throws IOException { HttpStatus statusCode = getHttpStatusCode(response); switch (statusCode.series()) { case CLIENT_ERROR: throw new HttpClientErrorException(statusCode, response.getStatusText(), response.getHeaders(), getResponseBody(response), getCharset(response)); case SERVER_ERROR: throw new HttpServerErrorException(statusCode, response.getStatusText(), response.getHeaders(), getResponseBody(response), getCharset(response)); default: throw new RestClientException("Unknown status code [" + statusCode + "]"); } }
但是有时候会遇到一些特别的需求,比如409状态码不看做错误,或者不单单使用状态码作为错误的标示。
那么这种情况只有复写hasError,然后通过setErrorHandler来让自定义的错误处理器生效。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/08/25/spring-rest-operations-error-handle/