gpt4 book ai didi

java - Spring RestTemplate : How to reach state to check #is4xxClientError, 而不是 RestClientException 第一个?

转载 作者:行者123 更新时间:2023-12-03 09:01:06 24 4
gpt4 key购买 nike

根据我的经验,在调用 Spring 的 RestTemplate#exchange 并随后收到“404 - Not Found”响应后,会抛出 RestClientException 而不是返回 ResponseEntity可以检查其状态的(即:使用ResponseEntity#getStatusCode#is4xxClientError)。

我不明白为什么 HttpStatus#is4xxClientError 甚至存在,如果抛出 Exception 来阻止使用 返回 ResponseEntity HttpStatus 调用 #is4xxClientError...

我有理由相信我刚才描述的是实际情况,因为我可以在互联网上找到其他帐户来证实这一点(即: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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com