2

我的问题与How to change MediaType for MappingJacksonHttpMessageConverter in OAuth2RestTemplate非常相似,但在很多方面都不同。

我正在使用带有 SprintBoot 的 Spring 4。我想用来RestTemplate查询一个 Zimbra 网络服务。Web 服务返回“JSON SOAP”。它实际上只是 SOAP 消息格式的 JSON 响应。

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

我如何判断MappingJackson2HttpMessageConverter将此内容类型视为与常规 JSON 相同?

4

1 回答 1

7

经过一番寻找,我找到了解决这个问题的方法。调用时,会创建并加载new RestTemplate ()一大堆 default 。HttpMessageConverter这不使用任何 Spring bean。

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

  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);
     }
  }
于 2014-12-16T02:54:52.117 回答