我的问题与How to change MediaType for MappingJacksonHttpMessageConverter in OAuth2RestTemplate非常相似,但在很多方面都有所不同。
我正在使用Spring 4和SprintBoot。我想使用RestTemplate
来查询Zimbra Web服务。 Web服务返回“JSON SOAP”。它实际上只是一种SOAP消息格式的JSON响应。
不幸的是,响应返回text/javascript; charset=utf-8
,因此Message Converter失败,因为找不到该媒体类型的任何转换器。
如何告诉MappingJackson2HttpMessageConverter
将此内容类型视为常规JSON?
答案 0 :(得分:5)
经过多看,我找到了解决这个问题的方法。当一个人调用new RestTemplate ()
时,会创建并加载一大堆默认的HttpMessageConverter
。这不使用任何Spring bean。
因此,如果像我一样,您希望RestTemplate
配置所有默认值,只需将必要的内容类型添加到列表中,您可以执行以下操作:
RestTemplate myRest = new RestTemplate ();
for (HttpMessageConverter<?> myConverter : myRest.getMessageConverters ()) {
if (myConverter instanceof MappingJackson2HttpMessageConverter) {
List<MediaType> myMediaTypes = new ArrayList<MediaType> ();
myMediaTypes.addAll (myConverter.getSupportedMediaTypes ());
myMediaTypes.add (MediaType.parseMediaType ("text/javascript; charset=utf-8"));
((MappingJackson2HttpMessageConverter) myConverter).setSupportedMediaTypes (myMediaTypes);
}
}