Spring捕获所有响应类型

时间:2013-11-26 18:15:35

标签: java spring resttemplate

我目前正在构建一个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 - 从未得到回答 - 尽管我不确定,但我认为该代码的实际意图也与我的问题相符。

1 个答案:

答案 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: