我正在尝试向 jaxrs 服务执行请求,该服务的媒体类型设置为multipart/form-data
。该请求包含实体列表(xml)和图像(png,二进制)。我已按照中所述创建了请求this https://stackoverflow.com/questions/2793150BalusC 的线程。
在wireshark中检查后,该请求似乎没问题,除了ip标头校验和错误之外。(说一些关于“可能是由IP校验和卸载引起的”。)
我这里的大问题是如何在服务端处理多部分请求。我不希望包含来自 apache.cxf、resteasy 或类似内容的任何库。我想要依赖的只是 jaxrs api。
请求中的两个部分都有名称deliveries
and signature
,其中签名是以二进制形式发送的 png 图像文件。交货列表应从 xml 中解析(实体具有xmlrootelement
注释等,所以这部分单独工作)。我尝试过用这种方式来阅读不同的部分,但这确实是一个不可能的事情;
@PUT
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(@FormParam("deliveries") List<Delivery> deliveries, @FormParam("signature")File signature) {
//do something with the signature(image) and the list of deliveries.
}
这当然不起作用,如果我在 Websphere 上运行请求,它会给出 404 http 状态代码,而当我向嵌入式 openejb(在我们的集成测试框架中)运行请求时,它会给出 415。如果我删除FormParam
注释请求成功。
如何仅使用 jaxrs api 读取多部分请求的不同部分?
EDIT好的,所以我改变了PUT
to POST
,并添加了一个@Encoding
对参数的注释如下:
@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
@Encoded @FormParam("deliveries") String deliveries,
@Encoded @FormParam("signature") File signature) {
}
现在我将 xml 作为文本字符串获取,但我无法自动将其解组到交付列表,即使Content-Type
这部分有效负载的设置为application/xml
。另一个问题是我收到的文件的长度==0,并且我无法从中读取任何字节。
我在这里错过了一个要点吗?