我有一个端点,它通常返回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来调用这个端点。
发布于 2021-02-01 19:00:39
在Java和javax.ws.rs.core.Response中,你应该在你的头中尝试类似这样的东西:
Response.status(response.getStatus())
.header("Accept", "application/json")
.header("Content-type", "application/json")
.entity(entity)
.build();发布于 2021-08-03 18:25:49
为了解决这个问题,你必须考虑以下几个方面:
在这里,您必须考虑到,每次发生任何异常时,都会抛出自定义异常,异常处理程序将使用@ControllerAdvice或任何其他解决方案来实现。此异常处理程序将以JSON形式返回响应。
返回 application/octet-stream的
对于端点,您需要提到它将生成application/octet-stream。您可以使用:@GetMapping(produces = {MediaType.APPLICATION_OCTET_STREAM}).
GET请求的
当您调用生成application/octet-stream的端点时,您将添加值为application/octet-stream, application/json的Accept标头。现在,如果成功,您将收到八位位组流,如果出现任何异常,您将收到JSON响应。
我希望这个解决方案能对你有所帮助!
https://stackoverflow.com/questions/53660961
复制相似问题