产生application / octet-stream和application / json

时间:2018-12-06 22:58:56

标签: java json rest jersey jax-rs

我有一个端点,该端点通常返回PDF,Word等类型的文档。此端点带有用户输入,但是我想对其进行验证。

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

的错误

StopIteration

我在端点上使用的是def generator(): return (yield 1) gen = generator() value = next(gen) print(value) # Prints '1'. try: value = gen.send(3) except StopIteration as exc: value = exc.value print(value) # Prints '3'.

有没有一种方法可以通过可能同时返回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"})来调用此端点。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  1. 异常管理

    在这里您必须考虑,每次遇到任何异常时,您都会抛出自定义异常,并且将使用 library(dplyr) df2 <- df1 %>% mutate(across(starts_with('X'), ~ +(!is.na(.))) 或任何其他解决方案实现异常处理程序。此异常处理程序将以 JSON 形式返回响应。

  2. 处理返回 @ControllerAdvice

    到端点,需要提到它会产生application/octet-stream。您可以使用:application/octet-stream

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

    当您调用生成 @GetMapping(produces = {MediaType.APPLICATION_OCTET_STREAM}) 的端点时,您将添加值为 application/octet-streamAccept 标头。现在,如果成功,您将收到八位字节流,如果出现任何异常,您将收到 JSON 响应。

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