之前,我有一個REST API,隨着體內含量的一些額外的非JSON數據響應。這打破了RestTemplate和jackson的使用。我可以在解析之前攔截http響應主體嗎?春RestTemplate,攔截響應解析成JSON
我使用RestTemplate.getForObject。
我已經採取了看看RestTemplate,無法看到合適的方法。
之前,我有一個REST API,隨着體內含量的一些額外的非JSON數據響應。這打破了RestTemplate和jackson的使用。我可以在解析之前攔截http響應主體嗎?春RestTemplate,攔截響應解析成JSON
我使用RestTemplate.getForObject。
我已經採取了看看RestTemplate,無法看到合適的方法。
你可以嘗試實施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
延伸AbstractJackson2HttpMessageConverter
與restTemplate
註冊。在我看來,這將是從視圖
從你的控制器,你可以嘗試返回ResponseEntity和操縱的實體對象手動
春點cleaneast如果你不需要這些額外的屬性您可以添加:
@JsonIgnoreProperties(ignoreUnknown = true)
您映射類。
從docs:定義是否正常反序列化過程中忽略任何無法識別 性能
屬性。如果屬實,這是 無法識別的所有屬性 - 也就是說,沒有接受他們 制定者和創造者 - 沒有警告被忽略(雖然未知屬性處理器, 如果有的話,仍然會被調用)無異常。 對序列化沒有任何影響。