使用JERSEY输入和输出二进制流?

我正在使用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。


白衣染霜花
浏览 900回答 3
3回答

慕工程0101907

通过扩展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方法获取输出流并将其写入,而不是新创建的输出流。不知道这是否是最好的方法,但是它有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java