Spring RestTemplate引发400错误的异常,但CloseableHttpClient不会

时间:2019-02-28 15:21:03

标签: java spring spring-boot resttemplate

我们正在使用Spring 4.3.9版本,并使用RestTemplate进行rest调用。我们有一些测试用例,其中当我们调用特定的端点时,我们故意对格式进行了格式错误(请求本身很好,有效负载的内容被故意进行了格式错误)。

无论如何,在这种情况下,端点除了将其标记为400错误(错误请求)外,还返回带有有意义信息的响应对象。 RestTemplate看到400错误,并引发HttpClientErrorException。由于抛出此异常,因此响应对象为null。

当我使用常规的apache HttpClient调用执行相同的请求(坏数据和全部)时,没有引发异常(尽管有400错误),并且请求对象返回了有意义的(有用的)信息。

当使用大量的Spring调试日志记录设置执行时,我可以看到有意义的信息肯定是从RestTemplate客户端调用返回的,但是RestTemplate抛出异常,因此似乎无法使调用者获得该消息。

有意义的消息是否有可能埋在异常响应的某个地方?如果是这样,我该如何提取呢?

如果未作为异常的一部分返回,有没有办法让RestTemplate避免引发此异常,而是像HttpClient那样仅返回响应对象?

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

  

有意义的消息是否有可能埋在异常响应的某个地方?

是的,响应的主体位于异常对象中。

要获取响应的正文,可以使用: HttpClientErrorException.getResponseBodyAsString()HttpClientErrorException.getResponseBodyAsByteArray()方法。

选中this