Java SpringRestTemplate引发400错误异常,但CloseableHttpClient未引发

Java SpringRestTemplate引发400错误异常,但CloseableHttpClient未引发,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我们正在使用spring版本4.3.9,并使用RestTemplate进行rest调用。我们有一些测试用例,当我们调用一个特定的端点时,我们故意有格式不好的内容(请求本身很好,负载的内容故意格式不好) 无论如何,在这些条件下,端点除了将响应对象标记为400错误(错误请求)之外,还返回一个包含有意义信息的响应对象。RestTemplate看到400错误并抛出HttpClientErrorException。由于引发了此异常,因此响应对象为null 当我使用常规ApacheHttpClient调用执

我们正在使用spring版本4.3.9,并使用RestTemplate进行rest调用。我们有一些测试用例,当我们调用一个特定的端点时,我们故意有格式不好的内容(请求本身很好,负载的内容故意格式不好)

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

当我使用常规ApacheHttpClient调用执行相同的请求(坏数据和所有数据)时,没有抛出异常(尽管出现400错误),并且请求对象返回有意义(有用)的信息

当使用广泛的spring调试日志设置执行时,我可以看到有意义的信息肯定是从RestTemplate客户端调用返回的,但是RestTemplate抛出异常,因此似乎无法使消息对调用方可用

是否有可能将有意义的消息隐藏在异常响应的某个地方?如果是,我如何提取它

如果不是作为异常的一部分返回,是否有一种方法可以防止RestTemplate抛出此异常,而只是像HttpClient那样返回响应对象

谢谢你的回复

是否有可能将有意义的消息隐藏在异常响应的某个地方

是的,响应的主体在异常对象中

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


检查

就这样!。HttpClientErrorException.getResponseBodyAsString()正是我所需要的,并回答了这篇文章。谢谢