我找到了几个如何消费多部分POST到泽西的示例,但没有找到如何生成这种格式。
我正在将Apache Wink Web服务转换为Apache Jersey(2.25)。两者都是JAX-RS 2,但我发现Wink中存在一些特殊结构,这对于在Jersey中找到等价物是一个挑战。
由于API本质上是我的服务和现有客户之间的合同,我想返回与服务现在返回的Jersey相同的格式。
Wink方法看起来像这样(我试着简化一下):
@POST
@Path("download")
@Consumes({MediaType.APPLICATION_JSON, ApiConstants.MEDIA_TEXT_XML_UTF8,
ApiConstants.MEDIA_APPLICATION_XML_UTF8})
@Produces({MediaType.MULTIPART_FORM_DATA})
public Response getFiles(@Context HttpHeaders httpHeaders, MyFileManifest manifest)
throws IOException, PermissionDeniedException {
String boundary = "boundary-" + UUID.randomUUID().toString();
// ... Creates this Wink construct ...
BufferedOutMultiPart mpEntity = new BufferedOutMultiPart();
for (int i = 0; i < manifest.getFiles().size(); ++i) {
MyManifestEntry entry = manifest.getFiles().get(i);
OutPart op = new OutPart();
op.addHeader("Name", "file-" + Integer.toString(entryIndex));
String disposition = "file; filename=\"" + content.partialPath.replace("\"", "\"\"") + "\"";
op.addHeader("Content-Disposition", disposition);
op.addHeader("Content-Type", content.contentType);
op.setBody(fileBlob);
mpEntity.addPart(op);
}
ResponseBuilder rBuild = Response.status(Status.OK).entity(mpEntity)
.header(ApiConstants.OPEN_DATA_KIT_VERSION_HEADER, ApiConstants.OPEN_DATA_KIT_VERSION)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Credentials", "true");
return rBuild.build();
}
我如何用泽西岛做到这一点?我找到了Jersey FormDataMultiPart类的文档,但听起来并不像是用于返回数据。