gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:20:44 27 4
gpt4 key购买 nike

我正在使用 Jersey 来实现一个 RESTful API,该 API 主要用于检索和提供 JSON 编码的数据。但在某些情况下,我需要完成以下工作:

  • 导出可下载的文档,例如 PDF、XLS、ZIP 或其他二进制文件。
  • 检索多部分数据,例如一些 JSON 和上传的 XLS 文件

我有一个基于 JQuery 的单页 Web 客户端,它创建对该 Web 服务的 AJAX 调用。目前,它不进行表单提交,并使用 GET 和 POST(带有 JSON 对象)。我应该使用表单帖子来发送数据和附加的二进制文件,还是可以使用 JSON 和二进制文件创建多部分请求?

我的应用程序的服务层当前在生成 PDF 文件时会创建一个 ByteArrayOutputStream。通过 Jersey 将此流输出到客户端的最佳方式是什么?我创建了一个 MessageBodyWriter,但我不知道如何从 Jersey 资源中使用它。这是正确的方法吗?

我一直在查看 Jersey 随附的示例,但尚未找到任何说明如何执行这些操作的任何内容。如果重要的话,我正在使用 Jersey 和 Jackson 来执行 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 方法获取输出流并写入该方法,而不是新创建的输出流。

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

关于java - 使用 JERSEY 输入和输出二进制流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3496209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com