Java 如何使用Spring Boot RestTemplate将Microsoft Office Mime类型作为内容类型头发送

Java 如何使用Spring Boot RestTemplate将Microsoft Office Mime类型作为内容类型头发送,java,spring,spring-boot,rest,ms-office,Java,Spring,Spring Boot,Rest,Ms Office,我正在用Java 8和SpringBoot构建一个微服务, 它具有以下流程- 将传入一个文件,文件名为GUID,没有文件扩展名 另一个xml文件将包含文件类型eg/xslx 文件类型是从xml中刮取的 *文件随后通过Http POST发送出去,正文作为文件负载 以及包含mime类型的标题“内容类型” *所有MS Office文档类型都应支持- 这里列出了22种不同的mime类型 我已将自定义MessageConverter添加到我的RestTemplate中- 作为内容类型标头, Spring抱

我正在用Java 8和SpringBoot构建一个微服务, 它具有以下流程-

  • 将传入一个文件,文件名为GUID,没有文件扩展名
  • 另一个xml文件将包含文件类型eg/xslx
  • 文件类型是从xml中刮取的
  • *文件随后通过Http POST发送出去,正文作为文件负载 以及包含mime类型的标题“内容类型”
  • *所有MS Office文档类型都应支持- 这里列出了22种不同的mime类型

    我已将自定义MessageConverter添加到我的RestTemplate中-

    作为内容类型标头, Spring抱怨:

    No HttpMessageConverter for sun.nio.ch.ChannelInputStream and content type "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    
    有人知道我如何让Spring表现并接受MS mime类型吗:


    感谢一个
    HttpMessageConverter
    在字节数据和一些Java对象之间进行转换。因此,它需要理解字节数据和Java对象类型。字节数据的格式以mime类型给出


    例如,
    HttpMessageConverter
    可以表示它支持
    application/xml
    Document
    DOM类型,在一个方向上转换时使用DOM解析器,在另一个方向上转换时使用XSLT copy转换

    另一个
    HttpMessageConverter
    则表示它支持
    application/xml
    和用
    @XmlRootElement
    注释的POJO类型,并将使用JAXB在两个方向上进行转换

    如您所见,mime类型和Java类型对于
    HttpMessageConverter
    都很重要

    问题中的错误消息标识mime类型和Java类型:

    • Mime类型:
      application/vnd.openxmlformats of icedocument.spreadsheetml.sheet

    • Java类型:
      sun.nio.ch.ChannelInputStream

    问题是,尽管您的自定义消息转换器已配置为支持所讨论的mime类型,但您使用了
    ByteArrayHttpMessageConverter
    ,并且它只支持
    byte[]
    作为Java类型(请参阅消息转换器类的名称)

    由于Java类型是ChannelInputStream,因此该自定义消息转换器不适用,并且由于没有其他消息转换器支持mime/Java类型组合,因此会出现该错误

    我看到两个相当简单的解决方案:

  • 将数据从
    ChannelInputStream
    加载到
    字节[]
    中,然后发送该数据而不是
    ChannelInputStream
    对象

  • 将自定义消息转换器更改为
    ResourceHttpMessageConverter
    ,然后在发送时将
    ChannelInputStream
    对象包装在
    InputStreamResource
    中。这将使数据流化,使用更少的内存。(推荐)

  • application/vnd.openxmlformats-officedocument.wordprocessingml.template 
    
    No HttpMessageConverter for sun.nio.ch.ChannelInputStream and content type "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"