中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring MVC中接口參數的實例分析

發布時間:2021-08-13 09:08:08 來源:億速云 閱讀:418 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關spring MVC中接口參數的實例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

spring MVC接口參數解析的過程

首先我自己慢慢的通過debug研究了一下源碼。在不添加任何注解的情況下:

spring MVC中接口參數的實例分析

spring MVC中接口參數的實例分析

在開發的過程中consumes和produces一般都沒有加,按道理應該要加上,因為可以減少對接口的查找范圍。這是一個簡單的demo,我只是需要他來檢查springmvc接收請求的流程。

首先在tomcat啟動之后,所有controller類中的請求路徑也就是@requestMapping隨著Controller這個bean加載到了spring的容器中。頁面請求過來之后找到DispatcherServlet這個servlet,請求走到servlet之后大家都知道servlet有兩種初始化方式,一種是隨著立即加載,一種是延遲加載,但是無論怎樣,都是只調用一次init方法,然后再以后每次都會直接調用service方法,當tomcat關閉之后servlet的destroy方法被調用生命周期就結束了。所以springmvc是對servlet的封裝就必定要繼承service方法,DispatcherServlet也就是doDispatch這個方法。這個方法中通過HttpServletRequest對象獲得請求路徑也就是/notJson,然后與容器中的所有url對比,最終取得Controller中的接口所在。找到了接口自然就知道了接口的參數,我這里就是Display,為了方便簡單,Display中只有兩個參數,就是下面ajax請求中的兩個。

spring MVC中接口參數的實例分析

springmvc會通過反射的方式獲取到pojo中的屬性。在這個過程中首先springmvc會先聲明一個數組,這個數組的大小是參數的個數,我這里只有一個,其實我相信很多人會和我遇到相同的問題就是,當參數中同時存在bean和基本類型的參數,springmvc將怎么解析,這個我遇到過幾次,在沒有看源碼的情況下,把基本類型也封裝到bean中去了,讓前端把屬性也寫在一個對象中。當然我相信這個不是每個人都能接受的做法,我們都希望搞清楚他究竟是怎樣解析的,到時候我們就可以任意擺弄了。下面是反射過程,將我的pojo反射之后獲得里面的屬性和方法。解析了參數之后,為參數賦值。這里也許是最重要的地方了。究竟是怎么賦值的。

spring MVC中接口參數的實例分析

spring MVC中接口參數的實例分析

從這個方法debug了解到,name為display,也就是pojo類名的小寫,這里不知道為什么springmvc做了這個處理(以后再看)。attribute為帶有age和name的對象。不過此時都是null。WebDataBinding用于從Web請求參數到JavaBean對象的數據綁定的特殊DataBinder。接上圖bindRequestParameters這個方法,跟進去會發現一個很熟悉的地方就是下圖,通過String[] values = request.getParameterValues(paramName);獲得參數名,這個是servlet的獲取參數方法,那么就可以知道請求的參數的屬性名和屬性值。

spring MVC中接口參數的實例分析

接下來可想而知就是把這個參數名name換成bean的屬性name,參數名age換成屬性名age。再跟到這個地方,這個oragina就是上面serclet拿到的屬性名值對,把這個map在這轉化成PropertyValue。(PropertyValue是用于保存單個bean屬性的信息和值的對象。 在此處使用對象,而不是僅將所有屬性存儲在由屬性名稱鍵入的映射中,允許更靈活,并且能夠以優化的方式處理索引屬性等。請注意,該值不需要是最終所需的類型:BeanWrapper實現應該處理任何必要的轉換,因為此對象不知道它將應用于哪些對象。),如此一來就有兩個PropertyValue對象了。

spring MVC中接口參數的實例分析

spring MVC中接口參數的實例分析

轉化的時候會忽略不知道的屬性

spring MVC中接口參數的實例分析

spring MVC中接口參數的實例分析

上圖是具體轉化的方法,方法比較長。下面一句直接給bean賦值。從這個過程來看。只要前端的json對象的屬性和后端的bean屬性一樣,ajax不寫content-type,用默認的application/x-www-form-urlencoded; charset=UTF-8,就能直接賦值。

spring MVC中接口參數的實例分析

關于“spring MVC中接口參數的實例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤岗市| 怀仁县| 奉贤区| 鲜城| 富锦市| 方城县| 巩义市| 四会市| 陆河县| 兴化市| 泰州市| 永登县| 富阳市| 剑川县| 光泽县| 彭阳县| 星子县| 茶陵县| 门源| 江口县| 长海县| 峨眉山市| 深州市| 宁化县| 潞西市| 天全县| 仲巴县| 济宁市| 玉门市| 宝鸡市| 梓潼县| 奉化市| 南投县| 布拖县| 弋阳县| 大港区| 湟源县| 海阳市| 和林格尔县| 巴彦淖尔市| 临漳县|