cel*_*epo 2 java spring http-status-codes resttemplate
根据我的经验,在调用 SpringRestTemplate#exchange随后收到“404 - Not Found”响应后,RestClientException会抛出 a 而不是返回ResponseEntity可以检查其状态的 a (即: with ResponseEntity#getStatusCode#is4xxClientError)。
我不明白为什么HttpStatus#is4xxClientError即使存在,如果反而Exception抛出一个阻止返回ResponseEntitywithHttpStatus来调用 #is4xxClientError的...
我有理由相信我刚才描述的是实际情况,因为我可以在互联网上找到其他帐户来确认这一点(即:Spring MVC - RestTemplate launch exception when http 404发生)。
如何在 Java 代码中使用我RestTemplate确实可以检查ResponseEntity#getStatusCode#is4xxClientError 何时RestTemplate#exchange收到 404 的状态,而不是被 阻止RestClientException?RestTemplate和配置 有关系吗?
或者我是否正确,这实际上是不可能的,也许它的存在ResponseEntity#getStatusCode#is4xxClientError实际上是一个“错误”?
RestTemplate有一个方法
public void setErrorHandler(ResponseErrorHandler errorHandler);
Run Code Online (Sandbox Code Playgroud)
ResponseErrorHandler接口如下所示。
public interface ResponseErrorHandler {
boolean hasError(ClientHttpResponse response) throws IOException;
void handleError(ClientHttpResponse response) throws IOException;
}
Run Code Online (Sandbox Code Playgroud)
每当RestTemplate处理响应时,它首先调用ResponseErrorHandler#hasError(),如果返回 true,则调用ResponseErrorHandler#handleError() ,这可能会抛出异常。
如果您不设置ResponseErrorHandler#setErrorHandler(),则默认为DefaultResponseErrorHandler.java。
默认实现将 4xx / 5xx 系列状态代码视为错误并抛出 RestClientException(不是此异常,而是此异常的子类)。
您始终可以编写自己的ResponseErrorHandler并覆盖默认行为。因此,即使在 4xx / 5xx 的情况下,您也可以获取ResponseEntity对象(通过编写您自己的实现ResponseErrorHandler并始终false从该方法返回hasError())。
一旦有了ResponseEntity对象,您就可以使用ResponseEntity#getStatusCode()#is4xxClientError()方法来达到相同的目的。
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |