springbootboot-HttpServletRequest.getInputStream() 獲取post內容


問題描述:

在php端用curl post一段json到java springboot。在java端用request.getInputStream()獲取到的數據為空。

 

問題確認:

詢問度娘后, 她告訴我:

根據Servlet規范,如果同時滿足下列條件,則請求體(Entity)中的表單數據,將被填充到request的parameter集合中(request.getParameter系列方法可以讀取相關數據):
1 這是一個HTTP/HTTPS請求
2 請求方法是POST(querystring無論是否POST都將被設置到parameter中)
3 請求的類型(Content-Type頭)是application/x-www-form-urlencoded
4 Servlet調用了getParameter系列方法

from:http://bbs.csdn.net/topics/390833946

抓包發現,php發送的post請求符合 以上規范。 好吧, 就是因為這樣, 導致request.getInputStream()獲取不到數據,因為getInputStream()流中的數據被讀被框架放到 request 的paramter相關變量中去了, 並且一旦放置成功,getInputStream()流中的數據將被清空。(猜測: 其實是流讀取到最后, 沒有被重置。吐槽spring/java: .net中至少流是可以設置讀取 指針指向0, 則可以重新讀取流了好吧。)

 

解決辦法:

在讀取post參數時, 如果getInputStream()讀取為空,則從getParameterMap()中讀取。(再次吐槽: 參數居然是key, 不是value???)

 

思考:

我真的好想你, .net

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM