我们正在使用Spring 4.3.9版本,并使用RestTemplate进行rest调用。我们有一些测试用例,其中当我们调用特定的端点时,我们故意对格式进行了格式错误(请求本身很好,有效负载的内容被故意进行了格式错误)。
无论如何,在这种情况下,端点除了将其标记为400错误(错误请求)外,还返回带有有意义信息的响应对象。 RestTemplate看到400错误,并引发HttpClientErrorException。由于抛出此异常,因此响应对象为null。
当我使用常规的apache HttpClient调用执行相同的请求(坏数据和全部)时,没有引发异常(尽管有400错误),并且请求对象返回了有意义的(有用的)信息。
当使用大量的Spring调试日志记录设置执行时,我可以看到有意义的信息肯定是从RestTemplate客户端调用返回的,但是RestTemplate抛出异常,因此似乎无法使调用者获得该消息。
有意义的消息是否有可能埋在异常响应的某个地方?如果是这样,我该如何提取呢?
如果未作为异常的一部分返回,有没有办法让RestTemplate避免引发此异常,而是像HttpClient那样仅返回响应对象?
感谢您的回复!
答案 0 :(得分:0)
有意义的消息是否有可能埋在异常响应的某个地方?
是的,响应的主体位于异常对象中。
要获取响应的正文,可以使用:
HttpClientErrorException.getResponseBodyAsString()
或HttpClientErrorException.getResponseBodyAsByteArray()
方法。
选中this