当前位置: 首页 > 面试题库 >

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

阎阎宝
2023-03-14
问题内容

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


问题答案:

通过扩展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方法获取输出流并将其写入,而不是新创建的输出流。

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



 类似资料:
  • 输出 用print加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下: >>> print 'hello, world' print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出: >>> print 'The quick brown fox', 'jumps over', 'the lazy dog' The quick brown

  • 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world',用代码实现如下: >>> print('hello, world') print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出: >>> print('The quick brown fox', 'jumps over', 'the lazy dog') The qu

  • 到目前为止,我们讨论的所有示例本质上都是静态的。在本章中,我们将学习如何Haskell与用户动态交互。学习Haskell中使用的不同输入和输出技术。 1. 文件和流 到目前为止,我们已经对程序本身中的所有输入进行了硬编码,在前面学习的内容中都是从静态变量获取输入。本小节中,我们学习如何从外部文件读取和写入。 创建一个文件并命名为abc.txt。接下来,在此文本文件中输入以下一行: 接下来,我们将编

  • Scipy.io包提供了多种功能来解决不同格式的文件(输入和输出)。 其中一些格式是 - Matlab IDL Matrix Market Wave Arff Netcdf等 这里讨论最常用的文件格式 - MATLAB 以下是用于加载和保存文件的函数。 编号 函数 描述 1 加载一个MATLAB文件 2 保存为一个MATLAB文件 3 列出MATLAB文件中的变量 让我们来看看下面的例子。 上述程

  • 我们经常需要与用户交互,要么获取数据,要么提供某种结果。现今的大多数程序都使用一个对话框来让用户提供某种类型的输入。虽然 Python 确实有创建对话框的方法,但是我们可以使用一个简单得多的函数。Python 为我们提供了一个功能,允许我们要求用户输入一些数据,并以字符串的形式返回数据的引用。这个函数叫做 input。 Python 的输入函数接受单个参数,即字符串。这个字符串通常被称为提示符,因

  • 一个程序可以有几种输出方式:以人类可读的方式打印数据,或者写入一个文件供以后使用。 本章将讨论几种可能性。 7.1. 格式化输出 我们有两种大相径庭地输出值方法:表达式语句 和 print() 函数。(第三种访求是使用文件对象的 write() 方法,标准文件输出可以参考 sys.stdout 。详细内容参见库参考手册。) 通常,你想要对输出做更多的格式控制,而不是简单的打印使用空格分隔的值。 有