簡體   English   中英

Spring:如何在讀取inputStream后使用@RequestBody

[英]Spring: How to use @RequestBody after reading inputStream

我有這里描述的問題但我不清楚如何解決它。

問題是我有一個AuthenticationProvider,它必須讀取請求的主體。 但是,當我的控制器方法想通過@RequestMapping使用該數據時,它是空的,因為Provider已經讀取了inputStream。

有沒有辦法從Request獲取一個支持標記/重置的inputReader,這樣我的提供者可以在進行身份驗證后簡單地將流回滾到它的初始狀態? 看起來很瘋狂,過濾器的默認行為是對請求對象的破壞性修改。

應僅在特定情況下觸發提供程序,因此不應影響整個應用程序。 但是,如果您需要提供者處理的請求中的正文,那么您仍然有一個解決方法:

  1. 實現一個servlet Filter
  2. 包裝請求
  3. 在包裝器中緩存請求主體,然后重寫getInputStream()方法以返回帶有緩存請求主體的ByteArrayInputStream 這樣它可以多次讀取。

spring的AbstractRequestLoggingFilter執行類似的操作,並有一個示例包裝器,您可以檢查它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM