我正在使用Jersey来实现一个RESTful API,该API主要是检索和提供JSON编码的数据。但是在某些情况下,我需要完成以下任务:导出可下载的文档,例如PDF,XLS,ZIP或其他二进制文件。检索多部分数据,例如一些JSON以及上载的XLS文件我有一个基于页面的基于JQuery的Web客户端,该客户端创建对此Web服务的AJAX调用。目前,它不执行表单提交,而是使用GET和POST(带有JSON对象)。我应该利用表单发布来发送数据和附加的二进制文件,还是可以使用JSON和二进制文件创建多部分请求?我的应用程序的服务层当前在生成PDF文件时会创建一个ByteArrayOutputStream。通过Jersey向客户输出此流的最佳方法是什么?我已经创建了一个MessageBodyWriter,但是我不知道如何从Jersey资源中使用它。那是正确的方法吗?我一直在浏览Jersey附带的示例,但还没有发现任何说明如何执行这些操作的示例。如果有关系,我将Jackson与Jackson一起使用Jersey来执行Object-> JSON,而无需执行XML步骤,并且实际上并未利用JAX-RS。
3 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
通过扩展StreamingOutput对象,我设法获得了ZIP文件或PDF文件。这是一些示例代码:
@Path("PDF-file.pdf/")
@GET
@Produces({"application/pdf"})
public StreamingOutput getPDF() throws Exception {
return new StreamingOutput() {
public void write(OutputStream output) throws IOException, WebApplicationException {
try {
PDFGenerator generator = new PDFGenerator(getEntity());
generator.generatePDF(output);
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
};
}
PDFGenerator类(我自己的用于创建PDF的类)从write方法获取输出流并将其写入,而不是新创建的输出流。
不知道这是否是最好的方法,但是它有效。
添加回答
举报
0/150
提交
取消