【问题标题】:IME media type application/pdf was not found in restful webservice在 RESTful Web 服务中找不到 IME 媒体类型应用程序/pdf
【发布时间】:2014-01-02 13:37:13
【问题描述】:

我在下面有这个宁静的网络服务代码。但是当访问网络服务时,我得到“找不到 MIME 媒体类型应用程序/pdf”。 docService.findByVersionId 确实返回一个“TestDoc”,它将 pdf 内容保存为 byte[]。

你能帮我解决这个问题吗?

@GET
    @Path("/getPdf/{versionId}")
    @Produces("application/pdf")
    public Response getPdfFile(@PathParam("versionId") final String versionId) {
        try {
            final TestDoc doc = this.docService.findByVersionId(versionId);
            final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            final BufferedOutputStream bos = new BufferedOutputStream(byteArrayOutputStream);
            final byte[] pdfContent = doc.getPdfDoc();
            bos.write(pdfContent);
            bos.flush();
            bos.close();
            return Response.ok(byteArrayOutputStream).build();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

错误:

 Exception:
 2014-01-02 12:42:07,497 ERROR [STDERR] 02-Jan-2014 12:42:07  com.sun.jersey.spi.container.ContainerResponse write
 SEVERE: A message body writer for Java class java.io.ByteArrayOutputStream, and Java type class java.io.ByteArrayOutputStream, and MIME media type application/pdf was not found

【问题讨论】:

  • 我可以在您的 rest-client 上查看代码还是您使用浏览器访问此 pdf api?在一般情况下,根据我的经验,rest-client(无论您使用什么客户端)都无法反序列化响应,因为您可能忘记提及响应的类型(在本例中为 application/pdf)。让我们讨论一下更多,一旦你用你的休息客户端代码(如果有的话)更新问题
  • 您可能也想看看这里。这应该回答你的问题:stackoverflow.com/a/3503704/3066911
  • 您找到解决方案了吗?

标签: web-services rest pdf


【解决方案1】:

您似乎无法使用 ByteArrayOutputStream。解决方案是使用 StreamingOutput。

@GET
public Response generatePDF(String content) {
    try {
        ByteArrayOutputStream outputStream = service.generatePDF(content);
        StreamingOutput streamingOutput = getStreamingOutput(outputStream);

        Response.ResponseBuilder responseBuilder = Response.ok(streamingOutput, "application/pdf");
        responseBuilder.header("Content-Disposition", "attachment; filename=Filename.pdf");
        return responseBuilder.build();
    } catch (IOException e) {
        log.log(Level.SEVERE, e.getMessage(), e);
        return Response.serverError().build();
    }
}



private StreamingOutput getStreamingOutput(final ByteArrayOutputStream byteArrayOutputStream) {
    return new StreamingOutput() {
        public void write(OutputStream output) throws IOException, WebApplicationException {
            byteArrayOutputStream.writeTo(output);
        }
    };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多