欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

modeattribute和requestbody直接區別

錢艷冰2年前19瀏覽0評論

modeattribute和requestbody直接區別?

@ModelAttribute的用法,與@RequestBody的區別

@ModelAttribute的用法大概有兩種:一種是直接標記在方法上,一種是標記在方法的參數中,兩種標記的方法產生效果也各不相同

一.直接標記在方法上

部署后運行,點擊頁面測試按鈕,查看控制臺輸出,這個時候你會發現,后臺控制器并沒有直接進入modelTest.do的路徑,而是先執行了被@ModelAttribute標記的init方法。應該這么理解,當同一個controller中有任意一個方法被@ModelAttribute注解標記,頁面請求只要進入這個控制器,不管請求那個方法,均會先執行被@ModelAttribute標記的方法,所以我們可以用@ModelAttribute注解的方法做一些初始化操作。當同一個controller中有多個方法被@ModelAttribute注解標記,所有被@ModelAttribute標記的方法均會被執行,按先后順序執行,然后再進入請求的方法。

當@RequestMapping標記和@ModelAttribute同時標記在一個方法上

點擊測試頁面發現進入控制器后返回,頁面報404,這是因為當兩個注解標記到同一個方法上時,邏輯視圖名并不是返回值,而是返回請求的路徑,根據model/modelTest.do生成邏輯視圖。在這里我們修改下代碼,把controller上的@RequestMapping標記去掉,并修改下頁面的請求路徑,讓生成的視圖路徑和訪問的頁面路徑相同。

點擊測試頁面,會發現當兩個注解同時注解到一個方法上時,方法的返回值會變成model模型的返回值,key是標記的名

二.@ModelAttribute標記在參數前

點擊頁面測試,頁面文本框會顯示URL地址傳遞過來的參數,因為SpringMVC會自動匹匹配頁面傳遞過來的參數的name屬性和后臺控制器中的方法中的參數名,如果參數名相同,會自動匹配,如果控制器中方法是封裝的bean,會自動匹配bean中的屬性,其實這種取值方式不需要用@ModelAttribute注解,只要滿足匹配要求,也能拿得到值