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

时间:2014-12-16 02:52:30

标签: rest spring-boot spring-4 zimbra

我的问题与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?

1 个答案:

答案 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);
     }
  }