我目前正在构建一个 REST 客户端,它的代码与 Consuming a RESTful Web Service 中的代码几乎完全相同。指导。这个简单的示例在接收有效的 JSON 响应时效果非常好,但由于我也在开发 Web 服务,因此我希望能够捕获原始响应内容,以防响应不是有效的 JSON(无需发送两次请求)。
所以基本上指南可以归结为以下代码:
RestTemplate restTemplate = new RestTemplate();
Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class);
System.out.println("Name: " + page.getName());
System.out.println("About: " + page.getAbout());
System.out.println("Phone: " + page.getPhone());
System.out.println("Website: " + page.getWebsite());
并且是基于这个类的:
package hello;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Page {
private String name;
private String about;
private String phone;
private String website;
public String getName() {
return name;
}
public String getAbout() {
return about;
}
public String getPhone() {
return phone;
}
public String getWebsite() {
return website;
}
}
现在假设响应不是有效的 JSON(由于 Web 服务中的错误等),或者甚至响应类型不是 application/json
,我如何将响应正文记录为纯文本? IE。当此行失败时,如何以纯文本形式访问响应正文:
Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class);
PS:我遇到了this question - 从未得到答复 - 虽然我不确定,但我认为该代码的实际意图也符合我的问题。
最佳答案
您必须实现自定义 ResponseErrorHandler 并将其插入到您的 RestTemplate bean 中。
类似于:
public class LogResponseErrorHandler implements ResponseErrorHandler {
...
@Override
public void handleError(ClientHttpResponse response) throws IOException {
logResponse(response.getBody());
}
...
}
an article about the concrete usage of ResponseErrorHandler:
关于java - Spring捕获所有响应类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224825/