如何将MediaType添加到MappingJackson2HttpMessageConverter而不是RestTemplate

如何将MediaType添加到MappingJackson2HttpMessageConverter而不是RestTemplate,rest,spring-boot,spring-4,zimbra,Rest,Spring Boot,Spring 4,Zimbra,我的问题非常类似,但在许多方面有所不同 我将Spring4与SprintBoot一起使用。我想使用restemplate查询Zimbra web服务。web服务返回“JSON SOAP”。它实际上只是SOAP消息格式的JSON响应 不幸的是,响应返回为text/javascript;charset=utf-8因此消息转换器失败,因为它找不到该媒体类型的任何转换器 我如何告诉映射J2SOHTPHTMasgEngVIEWT/来考虑这个内容类型与常规JSON? < P>相同。经过大量的观察,我找到了解

我的问题非常类似,但在许多方面有所不同

我将Spring4与SprintBoot一起使用。我想使用
restemplate
查询Zimbra web服务。web服务返回“JSON SOAP”。它实际上只是SOAP消息格式的JSON响应

不幸的是,响应返回为
text/javascript;charset=utf-8
因此消息转换器失败,因为它找不到该媒体类型的任何转换器


<>我如何告诉<代码>映射J2SOHTPHTMasgEngVIEWT/<代码>来考虑这个内容类型与常规JSON?

< P>相同。经过大量的观察,我找到了解决这个问题的方法。当调用
newrestemplate()
时,会创建并加载一大堆默认的
HttpMessageConverter
s。这不使用任何SpringBean

因此,如果像我一样,您想让
restemplate
配置其所有默认值,但只需将必要的内容类型添加到列表中,您可以执行以下操作:

  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);
     }
  }
restemplate myRest=newrestemplate();
对于(HttpMessageConverter myConverter:myRest.getMessageConverters()){
if(映射Jackson2HttpMessageConverter的myConverter实例){
List myMediaTypes=newarraylist();
myMediaTypes.addAll(myConverter.getSupportedMediaTypes());
myMediaTypes.add(MediaType.parseMediaType(“text/javascript;charset=utf-8”);
((MappingJackson2HttpMessageConverter)myConverter)。设置支持的媒体类型(myMediaTypes);
}
}

不确定这是否是最好的方法,但确实有效!谢谢我认为使用RestTemplate作为bean,并使用文本/javascript注入一个新的转换器可能是一个不错的选择。如果您开始添加不是真正的JSON的内容类型,对CSRF来说可能是危险的