在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Java/ Spring注解@RequestBody是如何獲取到數(shù)據(jù)的?

Spring注解@RequestBody是如何獲取到數(shù)據(jù)的?

背景:最近在寫SpringBoot與微信小程序,微信小程序有一個關于自建Session的問題,需要我在json數(shù)據(jù)中方一個3rd_session_key來作為用戶的session信息,所以我需要在用戶登錄后的每一條json數(shù)據(jù)中加上這個3rd_session_key的參數(shù)。于是我準備用過濾器來filter來實現(xiàn)。

在實現(xiàn)這個邏輯的過程中,遇到了一些問題。

首先,我是實現(xiàn)了 javax.servlet.Filter 接口,
然后在 doFilter() 方法中通過傳入 ServletRequest 對象來獲取傳入的json數(shù)據(jù),具體我就不做展示了。

此時就遇到了一個問題,在過濾器filter中獲取到json數(shù)據(jù)以后,我的controller就拿不到數(shù)據(jù)了。后面經(jīng)過一番Google找到了解決方案,就是重寫了HttpServletRequestWrapper的getInputStream() 方法。

我的問題是在Spring中 @RequestBody 是如何實現(xiàn)拿到前端傳回來的json數(shù)據(jù)的呢?

我有嘗試查看這個 getInputStream() 方法的源碼,但是我卡在了 ServletRequest 這個接口的 public ServletInputStream getInputStream() throws IOException 方法,我還不知道怎么找接口方法的具體實現(xiàn)。

感謝。

回答
編輯回答
兮顏

會不會是樓主在filter中使用request.getInputStream();
這樣你在filter中就把這個流的內(nèi)容讀取了
在controller中再次讀取這個流就讀不到數(shù)據(jù)了.
同一個流不能被讀取2次哇

2018年3月5日 05:41
編輯回答
心悲涼

恩. @requestbody 就是把HttpServletRequest的輸入(request.getInputStream())通過json,轉換成一個對象.
在spring中是RequestResponseBodyMethodProcessor利用HttpMessageConventer做的.

另外,可以不用這個注解, 直接將字符串轉json, 往json里面添加.

2018年3月30日 18:12