我一直在嘗試找到一種方法來在我的 Spring Boot 應用程式中記錄請求的回應主體。我暫時放棄了這個,只是在回傳之前登錄每個控制器,因為讓它作業的努力(全域,對于所有帶有過濾器或請求攔截器的控制器)似乎非常大/過于復雜。
在 python django 專案中,這似乎就像一個中間件一樣簡單,比如log.info(response.body).
我是 Java 新手,所以我確信有一個正當的理由,但有人可以解釋為什么嗎?
為了嘗試在 java 中獲取回應主體的字串表示,從 HttpServletResponse 涉及像這樣的各種爭論
uj5u.com熱心網友回復:
HttpServletRequest/Response類旨在直接從/向瀏覽器流式傳輸資料。它們用于處理網路上的 I/O 通信,但它們不需要存盤整個請求/回應主體。
這允許 servlet 直接流式傳輸資料,并且當您想要記錄回應時,資料已經通過網路發送(嗯,除了異步處理,但這會使您的目的變得更加復雜)。默認實作不知道它必須保留資料副本以用于記錄目的。
這就是為什么您需要實作一個Filter包裝請求/回應以保留和記錄正文的原因,正如您在鏈接中指出的那樣。通常,您可能希望自定義此行為以僅選擇特定請求、限制大小、定義如何記錄它等。因此未提供默認實作,但您有很多解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400844.html
