Spring RestTemplate 抛出 400 错误异常,但 CloseableHttpClient 不会
Spring RestTemplate throws exception for 400 error but CloseableHttpClient does not
我们正在使用 spring 版本 4.3.9 并使用 RestTemplate 进行休息调用。我们有一些测试用例,在这些用例中,当我们调用特定端点时,我们故意使用格式错误的内容(请求本身很好,有效负载的内容故意格式错误)。
无论如何,在这些条件下,端点 returns 除了将其标记为 400 错误(错误请求)之外,还包含一个具有有意义信息的响应对象。 RestTemplate 看到 400 错误并抛出 HttpClientErrorException。由于抛出了这个异常,所以响应对象为null。
当我使用常规的 apache HttpClient 调用执行相同的请求(坏数据和所有)时,没有抛出异常(尽管出现 400 错误)并且请求对象返回了有意义(有用)的信息。
当使用广泛的 spring 调试日志记录设置执行时,我可以看到有意义的信息肯定是从 RestTemplate 客户端调用返回的,但是 RestTemplate 抛出异常,因此似乎无法使消息对来电者。
有意义的消息是否可能隐藏在异常响应的某处?如果是这样,我该如何提取它?
如果没有作为异常的一部分返回,有没有办法让 RestTemplate 不抛出这个异常,而是像 HttpClient 那样只返回响应对象?
感谢您的回复!
Is it possible the meaningful message is buried in the exception response somewhere?
是的,响应的主体在异常对象中。
要获取响应正文,您可以使用:
HttpClientErrorException.getResponseBodyAsString()
或 HttpClientErrorException.getResponseBodyAsByteArray()
方法。
勾选this
我们正在使用 spring 版本 4.3.9 并使用 RestTemplate 进行休息调用。我们有一些测试用例,在这些用例中,当我们调用特定端点时,我们故意使用格式错误的内容(请求本身很好,有效负载的内容故意格式错误)。
无论如何,在这些条件下,端点 returns 除了将其标记为 400 错误(错误请求)之外,还包含一个具有有意义信息的响应对象。 RestTemplate 看到 400 错误并抛出 HttpClientErrorException。由于抛出了这个异常,所以响应对象为null。
当我使用常规的 apache HttpClient 调用执行相同的请求(坏数据和所有)时,没有抛出异常(尽管出现 400 错误)并且请求对象返回了有意义(有用)的信息。
当使用广泛的 spring 调试日志记录设置执行时,我可以看到有意义的信息肯定是从 RestTemplate 客户端调用返回的,但是 RestTemplate 抛出异常,因此似乎无法使消息对来电者。
有意义的消息是否可能隐藏在异常响应的某处?如果是这样,我该如何提取它?
如果没有作为异常的一部分返回,有没有办法让 RestTemplate 不抛出这个异常,而是像 HttpClient 那样只返回响应对象?
感谢您的回复!
Is it possible the meaningful message is buried in the exception response somewhere?
是的,响应的主体在异常对象中。
要获取响应正文,您可以使用:
HttpClientErrorException.getResponseBodyAsString()
或 HttpClientErrorException.getResponseBodyAsByteArray()
方法。
勾选this