我有一个端点,该端点通常返回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"})
来调用此端点。
答案 0 :(得分:1)
在 Java
和 javax.ws.rs.core.Response
中,您应该在标题中尝试这样的操作:
Response.status(response.getStatus())
.header("Accept", "application/json")
.header("Content-type", "application/json")
.entity(entity)
.build();
答案 1 :(得分:0)
为了解决这个问题,你必须考虑以下几个方面:
异常管理
在这里您必须考虑,每次遇到任何异常时,您都会抛出自定义异常,并且将使用 library(dplyr)
df2 <- df1 %>%
mutate(across(starts_with('X'), ~ +(!is.na(.)))
或任何其他解决方案实现异常处理程序。此异常处理程序将以 JSON 形式返回响应。
处理返回 @ControllerAdvice
到端点,需要提到它会产生application/octet-stream
。您可以使用:application/octet-stream
。
为 GET 请求提供正确的标头
当您调用生成 @GetMapping(produces = {MediaType.APPLICATION_OCTET_STREAM})
的端点时,您将添加值为 application/octet-stream
的 Accept
标头。现在,如果成功,您将收到八位字节流,如果出现任何异常,您将收到 JSON 响应。
希望这个解决方案能帮到你!