亚洲AVI,黑人巨茎大战欧美白妇,初高中生洗澡自慰高清网站,欧美日韩无砖专区一中文字

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

springMVC中接口參數(shù)的實(shí)例分析

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

在新疆等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站制作,新疆網(wǎng)站建設(shè)費(fèi)用合理。

spring MVC接口參數(shù)解析的過程

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

spring MVC中接口參數(shù)的實(shí)例分析

spring MVC中接口參數(shù)的實(shí)例分析

在開發(fā)的過程中consumes和produces一般都沒有加,按道理應(yīng)該要加上,因?yàn)榭梢詼p少對接口的查找范圍。這是一個(gè)簡單的demo,我只是需要他來檢查springmvc接收請求的流程。

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

spring MVC中接口參數(shù)的實(shí)例分析

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

spring MVC中接口參數(shù)的實(shí)例分析

spring MVC中接口參數(shù)的實(shí)例分析

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

spring MVC中接口參數(shù)的實(shí)例分析

接下來可想而知就是把這個(gè)參數(shù)名name換成bean的屬性name,參數(shù)名age換成屬性名age。再跟到這個(gè)地方,這個(gè)oragina就是上面serclet拿到的屬性名值對,把這個(gè)map在這轉(zhuǎn)化成PropertyValue。(PropertyValue是用于保存單個(gè)bean屬性的信息和值的對象。 在此處使用對象,而不是僅將所有屬性存儲在由屬性名稱鍵入的映射中,允許更靈活,并且能夠以優(yōu)化的方式處理索引屬性等。請注意,該值不需要是最終所需的類型:BeanWrapper實(shí)現(xiàn)應(yīng)該處理任何必要的轉(zhuǎn)換,因?yàn)榇藢ο蟛恢浪鼘?yīng)用于哪些對象。),如此一來就有兩個(gè)PropertyValue對象了。

spring MVC中接口參數(shù)的實(shí)例分析

spring MVC中接口參數(shù)的實(shí)例分析

轉(zhuǎn)化的時(shí)候會忽略不知道的屬性

spring MVC中接口參數(shù)的實(shí)例分析

spring MVC中接口參數(shù)的實(shí)例分析

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

spring MVC中接口參數(shù)的實(shí)例分析

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


新聞標(biāo)題:springMVC中接口參數(shù)的實(shí)例分析
標(biāo)題來源:http://news.spvevtbd.cn/article/jdohes.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP