【发布时间】:2017-12-19 20:21:33
【问题描述】:
当使用RestTemplate POST 时,影响 Spring 应用的消息转换器优先级的最方便的方法是什么?
用例:我想确保给定实体以 JSON 形式发布,而不是例如当我做restTemplate.postForEntity(url, entity, Void.class)时的XML。
默认
默认情况下,实体会转换为 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
这可能就是我要找的:)
【问题讨论】:
标签: java spring resttemplate