簡體   English   中英

發布時Spring RestTemplate消息轉換器優先級

[英]Spring RestTemplate message converter priority when posting

什么是影響消息轉換器優先級的最方便的方法Spring在使用RestTemplate時適用?

使用案例:當我執行restTemplate.postForEntity(url, entity, Void.class)我想確保給定的實體以JSON而不是例如XML進行restTemplate.postForEntity(url, entity, Void.class)

默認

默認情況下,實體將轉換為XML,因為MappingJackson2XmlHttpMessageConverter優先於MappingJackson2HttpMessageConverter 我的應用程序的默認轉換器列表似乎是(Spring掃描類路徑以查看可用的內容): 在此輸入圖像描述

選項1

您可以為給定的RestTemplate實例顯式配置消息轉換器,如restTemplate.setMessageConverters(Lists.newArrayList(new MappingJackson2HttpMessageConverter())) 如果實例是共享的(例如Spring bean),這是不方便的,因為在一種情況下可能需要轉換器X而在另一種情況下可能需要轉換器Y.

選項2

您可以顯式設置AcceptContent-Type HTTP標頭,在這種情況下,Spring將使用匹配的消息轉換器。 缺點是您必須使用RestTemplate.exchange而不是RestTemplate.postForEntity ,這意味着:額外的代碼,更少的便利。

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity requestEntity = new HttpEntity(entity, requestHeaders);
restTemplate.exchange(url, HttpMethod.POST, requestEntity, Void.class);

選項3

這可能是我正在尋找的:)

根據Spring javadoc( https://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/web/client/RestTemplate.html ),你仍然可以使用postForEntity,

public <T> ResponseEntity<T> postForEntity(java.lang.String url,
                                       @Nullable
                                       java.lang.Object request,
                                       java.lang.Class<T> responseType,
                                       java.util.Map<java.lang.String,?> uriVariables)
                                throws RestClientException
....

request參數可以是HttpEntity ,以便為請求添加額外的HTTP標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM