[英]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
來調用此端點。
在Java
和javax.ws.rs.core.Response
中,您應該在標頭中嘗試這樣的操作:
Response.status(response.getStatus())
.header("Accept", "application/json")
.header("Content-type", "application/json")
.entity(entity)
.build();
為了解決這個問題,你必須考慮以下幾個方面:
異常管理
在這里,您必須考慮每次遇到任何異常時都會拋出自定義異常,並且異常處理程序將使用@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 響應。
我希望這個解決方案能幫助你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.