繁体   English   中英

生成 application/octet-stream 和 application/json

[英]Producing application/octet-stream and application/json

我有一个端点,它通常返回 PDF、Word 等类型的文档。有用户输入与该端点一起出现,但是我想验证它。

问题是,当我验证输入并想要返回某种错误 JSON 响应时,我最终会收到类似于以下内容的错误

Failed executing GET /foo/generateBar: NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: FooResponse of media type: application/octet-stream

我在端点上使用的是@Produces({"application/octet-stream", "application/json"})

有没有一种方法可以通过返回 JSON 和不同的文件格式来避免这个错误? 我的印象是我使用的@Produces正在做什么,但我可能非常困惑。

此外,我必须注意,我在前端使用window.open来调用此端点。

Javajavax.ws.rs.core.Response中,您应该在标头中尝试这样的操作:

               Response.status(response.getStatus())
                       .header("Accept", "application/json")
                       .header("Content-type", "application/json")
                       .entity(entity)
                       .build();

为了解决这个问题,你必须考虑以下几个方面:

  1. 异常管理

    在这里,您必须考虑每次遇到任何异常时都会抛出自定义异常,并且异常处理程序将使用@ControllerAdvice或任何其他解决方案实现。 此异常处理程序将以 JSON 格式返回响应。

  2. 处理以返回application/octet-stream

    对于端点,您需要提及它将产生application/octet-stream 您可以使用: @GetMapping(produces = {MediaType.APPLICATION_OCTET_STREAM})

  3. 向 GET 请求提供正确的标头

    当您调用生成application/octet-stream的端点时,您将添加值为application/octet-stream, application/jsonAccept标头。 现在,如果成功,您将收到八位字节流,如果出现任何异常,您将收到 JSON 响应。

我希望这个解决方案能帮助你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM