[英]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
您可以顯式設置Accept
和Content-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.