2013-11-26 57 views
0

我目前正在構建一個與Consuming a RESTful Web Service指南中幾乎完全相同的代碼的REST客戶端。這個簡單的例子在接收到有效的JSON響應時工作得很好,但是由於我也在開發Web服務,我希望能夠在響應不是有效的JSON(不必發送請求兩次)的情況下捕獲原始響應內容。Spring捕獲所有響應類型

所以基本上指南歸結爲以下代碼:

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,我怎樣才能以純文本格式記錄響應主體?即我怎麼能訪問響應正文以純文本時,此行失敗:

Page page = restTemplate.getForObject("http://graph.facebook.com/gopivotal", Page.class); 

PS:我碰到this question來 - 這從來沒有得到回答 - 雖然我不知道,我覺得代碼的真實意圖也與我的問題一致。

回答

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:

+0

謝謝,這是我一直在尋找! – DePhille