我正在尝试编写一个REST端点,它接收多个文件(作为输入流)和有关这些文件的数据(如Json)。
这是我的客户:
public void doSomething() {
MultiPart parent = new MultiPart(MultiPartMediaTypes.createMixed());
MultiPart child = new MultiPart(MultiPartMediaTypes.createMixed());
child.bodyPart(new BodyPart(someObject, MediaType.APPLICATION_JSON_TYPE));
child.bodyPart(new StreamDataBodyPart(someInputStream));
child.bodyPart(new StreamDataBodyPart(someOtherInputStream));
BodyPart bp = new BodyPart(child, MultiPartMediaTypes.createMixed());
parent.bodyPart(bp);
client.post(Entity.entity(parent, MultiPartMediaTypes.createMixed());
}
这是我的服务器:
@POST
@Path("something")
@Consumes(MultiPartMediaTypes.MULTIPART_MIXED)
public Response multiPart( @Context HttpServletRequest httpServletRequest,
MultiPart multiPart) {
List<BodyPart> bodyParts = multiPart.getBodyParts();
for(BodyPart bp : bodyParts) {
MultiPart multiPart = (MultiPart)bp.getEntity();
}
}
理想情况下,我应该能够在该bodyPart上接收读取实体作为MultiPart。我应该能够访问底层的多部分。但我得到一个类强制转换异常(因为实体是一个BodyPartEntity)。
但是,在接收端,我得到一个包含bodyPart的MultiPart,其实体是BodyPartEntity,它只提供一个InputStream。输入流包含嵌套MultiPart的所有内容,但理想情况下,我应该只能将其作为MultiPart接收并直接从那里读取。
输入Stream看起来像这样:
--Boundary_3_1589640004_1523988834754
Content-Type: application/json
{"someJson" : "value"}
--Boundary_3_1589640004_1523988834754
Content-Type: application/octet-stream
Content-Disposition: form-data; filename="test.txt"; name="test.txt"
(a bunch of characters representing the image)
--Boundary_3_1589640004_1523988834754
这两个问题正在问我究竟是在问什么,但它们似乎都不适合我
How to consume a nested multipart/mixed mime type in jersey
Jersey reading nested Multipart (multipart/mixed)
如何在不必手动解析InputStream的情况下轻松访问基础MultiPart?我错过了什么?