我使用RestTemplate
與幾個REST服務交互,其中一些接受/返回JSON和一些XML。爲此,我添加了Jackson's dataformat-xml module作爲依賴項(以及JAXB annotations module)。 RestTemplate
自動包含MappingJackson2XmlHttpMessageConverter
(在RestTemplate
構造函數中完成)。如何防止MappingJackson2XmlHttpMessageConverter接管序列化?
這產生了被用作呼叫request
參數
RestTemplate.postForObject(String url, Object request, Class<T> responseType, Object... uriVariables)`
某些對象得到serlialized如XML和內容類型設置爲application/xml
請求的情況。例如:
MyObject request = ...;
String url = ...;
MyResponseObject response = restTemplate.postForObject(url, request, MyResponseObject.class);
RestTemplate
嘗試序列MyObject
到XML並設置請求媒體類型application/xml
。
問題是,我們所稱的很多服務都不接受XML(他們期望JSON)。所以現在我在類路徑上有MappingJackson2XmlHttpMessageConverter
,它優先於JSON轉換器,它使得對JSON服務的調用失敗。
我想我可以改變我的調用代碼來傳遞一個HttpEntity
,而媒體類型顯式地設置爲JSON而不是我的簡單數據對象,但這有點醜陋(樣板),並且意味着改變了很多服務調用代碼。
有一種方法要麼
A)改變了MessageConverter的優先級,使得標準Jackons(JSON)一個以上MappingJackson2XmlHttpMessageConverter
或
B)防止MappingJackson2XmlHttpMessageConverter
聲稱來自優先它可以序列化我不想要的物體
?
設置變量'transient'? –
什麼版本的Spring?你有沒有嘗試過以你想要的優先級配置一個'ContentNegotiationManager'或'ContentNegotiatingViewResolver'? –
@Rodrigo,它不是一個錯誤序列化的成員,它是整個對象。 –