我目前正在构建一个REST客户端,它与Consuming a RESTful Web Service指南中的代码完全相同。这个简单的例子在接收有效的JSON响应时非常有效,但由于我还在开发web服务,我希望能够捕获原始响应内容,以防响应无效JSON(无需发送请求两次)。 / p>
所以基本上指南归结为这段代码:
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(由于webservice中的错误等)或者甚至响应类型不是application/json
,我如何将响应主体记录为纯文本?即当该行失败时,如何以纯文本形式访问响应主体:
Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class);
PS:我遇到this question - 从未得到回答 - 尽管我不确定,但我认为该代码的实际意图也与我的问题相符。
答案 0 :(得分:2)
您必须实现自定义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: