- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据我的经验,在调用 Spring 的 RestTemplate#exchange
并随后收到“404 - Not Found”响应后,会抛出 RestClientException
而不是返回 ResponseEntity可以检查其状态的
(即:使用ResponseEntity#getStatusCode#is4xxClientError
)。
我不明白为什么 HttpStatus#is4xxClientError
甚至存在,如果抛出 Exception
来阻止使用 返回
调用 #ResponseEntity
HttpStatusis4xxClientError
...
我有理由相信我刚才描述的是实际情况,因为我可以在互联网上找到其他帐户来证实这一点(即:Spring MVC - RestTemplate launch exception when http 404 happens)。
如何使用 RestTemplate
进入 Java 代码状态,在 RestTemplate#exchange
时我确实可以检查 ResponseEntity#getStatusCode#is4xxClientError
收到 404,而不是被 RestClientException
阻止?与 RestTemplate
配置有关吗?
或者我是否正确,这实际上是不可能的,也许 ResponseEntity#getStatusCode#is4xxClientError
的存在实际上是一个“错误”?
最佳答案
RestTemplate有一个方法
public void setErrorHandler(ResponseErrorHandler errorHandler);
和ResponseErrorHandler接口(interface)看起来像这样。
public interface ResponseErrorHandler {
boolean hasError(ClientHttpResponse response) throws IOException;
void handleError(ClientHttpResponse response) throws IOException;
}
每当RestTemplate处理响应时,它首先调用ResponseErrorHandler#hasError(),如果返回true,则ResponseErrorHandler#handleError()调用可能会抛出异常。
如果您不设置ResponseErrorHandler#setErrorHandler(),则默认为DefaultResponseErrorHandler.java .
默认实现将 4xx/5xx 系列状态代码视为错误并抛出 RestClientException(不是此异常,而是此异常的子类)。
您始终可以编写自己的ResponseErrorHandler并覆盖默认行为。因此,即使在 4xx/5xx 的情况下,您也可以获取 ResponseEntity 对象(通过编写您自己的 ResponseErrorHandler
实现并始终返回 false
方法 hasError()
)。
一旦有了 ResponseEntity
对象,您就可以使用 ResponseEntity#getStatusCode()#is4xxClientError() 方法来达到相同目的。
关于java - Spring RestTemplate : How to reach state to check #is4xxClientError, 而不是 RestClientException 第一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239209/
我是一名优秀的程序员,十分优秀!