【问题标题】:How to add a MediaType to the MappingJackson2HttpMessageConverter instead of the RestTemplate如何将 MediaType 添加到 MappingJackson2HttpMessageConverter 而不是 RestTemplate
【发布时间】:2014-12-16 10:54:52
【问题描述】:

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

【问题讨论】:

    标签: rest spring-boot spring-4 zimbra


    【解决方案1】:

    经过一番寻找,我找到了解决这个问题的方法。当调用new RestTemplate () 时,会创建并加载一大堆默认的HttpMessageConverters。这不使用任何 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);
         }
      }
    

    【讨论】:

    • 不确定这是否是最好的方法,但它确实有效!谢谢!我认为使用 RestTemplate 作为 bean,并用 text/javascript 注入一个新的转换器可能是要走的路。
    • 如果您开始添加非真实 JSON 的内容类型,则可能对 CSRF 造成危险
    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多