2015-11-02 88 views
1

之前,我有一個REST API,隨着體內含量的一些額外的非JSON數據響應。這打破了RestTemplate和jackson的使用。我可以在解析之前攔截http響應主體嗎?春RestTemplate,攔截響應解析成JSON

我使用RestTemplate.getForObject。

我已經採取了看看RestTemplate,無法看到合適的方法。

回答

3

你可以嘗試實施ClientHttpRequestInterceptor並將其分配給restTemplate。實施intercept方法:

@Override 
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, 
     ClientHttpRequestExecution clientHttpRequestExecution) throws IOException { 

     ClientHttpResponse response=clientHttpRequestExecution.execute(httpRequest, bytes); 
     //...do magic with response body from getBody method 
     return response; 
} 

你可能有機會與自己的實現擴展AbstractClientHttpResponse做到這一點。

另一種選擇可能是治療從REST API作爲字符串的反應,然後根據需要格式化字符串,並明確其映射使用ObjectMapper反對。

然後在你的restTemplate你會:

String result = restTemplate.getForObject(url, String.class, host); 
//..trim the extra stuff 
MyClass object=objectMapper.readValue(result, MyClass.class); 

另一種辦法是實現自己的HttpMessageConverter延伸AbstractJackson2HttpMessageConverterrestTemplate註冊。在我看來,這將是從視圖

0

從你的控制器,你可以嘗試返回ResponseEntity和操縱的實體對象手動

0

春點cleaneast如果你不需要這些額外的屬性您可以添加:

@JsonIgnoreProperties(ignoreUnknown = true) 

您映射類。

docs:定義是否正常反序列化過程中忽略任何無法識別 性能

屬性。如果屬實,這是 無法識別的所有屬性 - 也就是說,沒有接受他們 制定者和創造者 - 沒有警告被忽略(雖然未知屬性處理器, 如果有的話,仍然會被調用)無異常。 對序列化沒有任何影響。