Java HTTP 415在调用Jersey multipart/mixed POST端点时-以multipart作为参数失败

Java HTTP 415在调用Jersey multipart/mixed POST端点时-以multipart作为参数失败,java,rest,jersey,Java,Rest,Jersey,我正在Jersey实现一个REST端点,该端点应使用以下格式的多部分/混合请求: content-type: multipart/mixed; boundary=--Boundary20171230945619789 manifest: ["Type1","Type2","Type3"] content-length: 325 ----Boundary20171230945619789 Content-Type: application/json ["string1","string2","

我正在Jersey实现一个REST端点,该端点应使用以下格式的多部分/混合请求:

content-type: multipart/mixed; boundary=--Boundary20171230945619789
manifest: ["Type1","Type2","Type3"]
content-length: 325

----Boundary20171230945619789
Content-Type: application/json

["string1","string2","string3"]
----Boundary20171230945619789
Content-Type: application/json

["string4","string5","string6"]
----Boundary20171230945619789
Content-Type: application/json

["string7","string8","string9"]
----Boundary20171230945619789--
“manifest”头字段包含用于处理每个主体部分的模式的字符串键的JSON数组

当我尝试执行以下请求时:

@Path("request/test/post")
@POST
@Consumes("multipart/mixed")
public Response tryPost(MultiPart multi) { ... }
我收到一个HTTP 415错误:

2017-09-19 17:34:32.006[http-nio-9909-exec-1]错误 com.sun.jersey.spi.container.ContainerRequest:460-消息正文 Java类org.glassfish.jersey.media.multipart.multipart的读取器, Java类型类org.glassfish.jersey.media.multipart.multipart, 和MIME媒体类型多部分/混合; 边界=--未找到边界20171230945619789。登记的 与MIME媒体类型兼容的邮件正文读取器为:*/*-> com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General com.sun.jersey.core.impl.provider.entity.EntityHolderReader

Jersey/Jackson无法将请求正确解析为多部分对象。如果我将签名更改为:

@Path("request/test/post")
@POST
@Consumes("multipart/mixed")
public Response tryPost(@HeaderParam("Manifest") String manifest, String rqBody){
    //etc here...
}
它工作正常-
manifest
由来自header字段的JSON填充(可以很容易地反序列化为一个列表或字符串数组),并且
rqBody
由请求正文正确填充。然而,要以这种方式使用请求体,我必须进行一些难看的(并且充满陷阱的)解析和标记化

我已经在
ResourceConfig
中注册了
MultiPartFeature
类,并尝试了看起来很有用的大多数其他选项。我看到的Jersey的几乎所有示例都使用多部分/表单数据;即使Jersey文档本身也基本上没有端点使用多部分/混合请求的例子,除了非常粗略的部分

有人知道这是什么问题吗?如何正确实现端点方法,以便能够将请求读入多部分对象

提前感谢您的帮助