Java 如何使用Spring Boot RestTemplate将Microsoft Office Mime类型作为内容类型头发送
我正在用Java 8和SpringBoot构建一个微服务, 它具有以下流程-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抱
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
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"