消耗注解
Consume http://cxf.apache.org/docs/jax-rs-multiparts.html#JAX-RSMultiparts-Formsandmultiparts使用 JAX-RS 提供的注释的事件阿帕奇CXF http://cxf.apache.org/:
@Consumes("multipart/related")
来自 JAX-RS 文档:
现在(自 2.2.5 起)可以拥有个人multipart/form-data
由注册的 JAX-RS MessageBodyReaders 读取的部分,对于类似的类型已经可以做到这一点multipart/mixed
or multipart/related
.
也可以看看:
- Spring Boot 多部分/相关 mime 类型支持 https://stackoverflow.com/q/38838926/59087
- Jersey:如何注册 MultiPartConfigProvider 类 https://stackoverflow.com/q/23982065/59087
请注意,GlassFish 使用的 Jersey 没有提及related
in its 源代码 https://github.com/jersey/jersey/blob/master/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/MultiPartMediaTypes.java.
HTTP客户端
谷歌提供了一个API https://cloud.google.com/java/docs/reference/google-http-client/latest/com.google.api.client.http.MultipartContent for an HTTP客户端 https://cloud.google.com/java/docs/reference/google-http-client/latest/overview解析multipart/related
消息按照RFC https://www.rfc-editor.org/rfc/rfc1521#section-7.2.2.
RESTeasy
The RESTeasy http://resteasy.jboss.org/项目可以解析multipart/related https://docs.jboss.org/resteasy/2.0.0.GA/userguide/html_single/#MultipartRelated通过 JAX-RS 的内容。
Java邮件API
通过一些流扭曲,可以使用 JavaMail API 来解析Mime多部分 http://docs.oracle.com/javaee/7/api/javax/mail/internet/MimeMultipart.html信息:
默认的多部分子类型是“混合”。其他多部分子类型(例如“替代”、“相关”等)可以实现为 MimeMultipart 的子类,并使用附加方法来实现该类型的多部分内容的附加语义。
The JavaMail 常见问题解答 https://javaee.github.io/javamail/FAQ提供了更多细节:
如上所述,还需要考虑更复杂的情况。特别是,消息可以任意嵌套multipart/mixed
and multipart/alternative
部分,可能包括multipart/related
嵌入 HTML 的部分和multipart/signed
and/or multipart/encrypted
用于安全消息的部件。
我建议不要采用这种方法,因为它混合了隐喻(它将 HTTP/web 上的 MIME 与 SMTP/mail 上的 MIME 混为一谈)。也就是说,从概念上讲,JavaMail 用于通过 SMTP/IMAP 读取和写入消息,这可能会让未来的维护人员想知道为什么使用 JavaMail 来解析通过 Servlet 接收的 MIME 消息,特别是当有基于注释的解决方案可用时。也就是说,记录代码及其使用原因将是避免任何混乱的一种方法。
容器
根据容器的不同,它可能会也可能不会处理所有相关的 RFC。您可能必须尝试(或仔细阅读)不同的容器才能查看哪些容器实现了此功能。
Jetty
The 源代码 https://github.com/eclipse/jetty.project有一些与解析输入流相关的地方,仅限于multipart/form-data
:
- 多部分过滤器 https://github.com/eclipse/jetty.project/blob/71d5fcf246034dce91cd642d35cdbaace9806329/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java#L146
- 多部分输入流解析器 https://github.com/eclipse/jetty.project/blob/71d5fcf246034dce91cd642d35cdbaace9806329/jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java#L505
此外,单元测试 https://github.com/eclipse/jetty.project/tree/71d5fcf246034dce91cd642d35cdbaace9806329/tests/test-integration/src/test/java/org/eclipse/jetty/test/rfcs不包括RFC 2387 https://www.rfc-editor.org/rfc/rfc2387,这是容器无法处理的强烈指标related
Servlet 3.0 API 下的部分。因此,JAX-RS 可能是最好的方法。
Tomcat
雄猫有未实现 https://bz.apache.org/bugzilla/show_bug.cgi?id=54917 multipart/related
作为 Servlet 3.0 规范的一部分,尽管存在 Tomcat 7.0.47 的修补版本。