Java 如何从web服务返回多部分/表单数据格式消息
我已经找到了几个例子,说明了如何使用到Jersey的多部分帖子,而不是如何生成这种格式 我正在将ApacheWinkWeb服务转换为ApacheJersey(2.25)。两者都是JAX-RS2,但我发现Wink中存在一些特殊的构造,要在Jersey中找到等价物是一个挑战 由于API本质上是我的服务和现有客户机之间的契约,因此我希望使用Jersey返回服务现在返回的相同格式 Wink方法如下所示(我尝试将其简化一点):Java 如何从web服务返回多部分/表单数据格式消息,java,web-services,jersey,jax-rs,jersey-2.0,Java,Web Services,Jersey,Jax Rs,Jersey 2.0,我已经找到了几个例子,说明了如何使用到Jersey的多部分帖子,而不是如何生成这种格式 我正在将ApacheWinkWeb服务转换为ApacheJersey(2.25)。两者都是JAX-RS2,但我发现Wink中存在一些特殊的构造,要在Jersey中找到等价物是一个挑战 由于API本质上是我的服务和现有客户机之间的契约,因此我希望使用Jersey返回服务现在返回的相同格式 Wink方法如下所示(我尝试将其简化一点): @POST @路径(“下载”) @使用({MediaType.APPLICAT
@POST
@路径(“下载”)
@使用({MediaType.APPLICATION_JSON,ApiConstants.MEDIA_TEXT_XML_UTF8,
媒体(应用程序XML UTF8})
@产生({MediaType.MULTIPART\u FORM\u DATA})
公共响应getFiles(@Context-HttpHeaders-HttpHeaders,MyFileManifest)
抛出IOException,PermissionDeniedException{
String boundary=“boundary-”+UUID.randomUUID().toString();
//…创建此眨眼构造。。。
BufferedOutMultiPart mpEntity=新的BufferedOutMultiPart();
对于(int i=0;i
如何使用Jersey实现这一点?我找到了Jersey类的文档,但听起来它不是用于返回数据的。检查此链接
@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();
}