如何从Jersey Web服务返回multipart / form-data格式的消息

时间:2017-04-18 20:02:42

标签: java web-services jersey jax-rs jersey-2.0

我找到了几个如何消费多部分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类的文档,但听起来并不像是用于返回数据。

0 个答案:

没有答案