为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2019-10-05 14:00:17
我正在使用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方法获取输出流并将其写入,而不是新创建的输出流。


不知道这是否是最好的方法,但是它有效。


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 899 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信