[英]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.