簡體   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