springmvc 06 Handler方法傳參

使用POJO作為參數
springmvc會自動把參數注入到POJO對象的屬性中貌嫡,且包括級聯注入

<body>

    <form action="springmvc/testPojo" method="post"><!-- 提交路徑不要以/開關 -->
         用戶名:<input type="text" name="name"><br>
         密碼:<input type="password" name="password"><br>
         年齡:<input type="text" name="age"><br>
         省份:<input type="text" name="address.province"><br>
         城市:<input type="text" name="address.city"><br>
        <button type="submit">登錄</button>
    </form>
    
</body>
    @RequestMapping("/testPojo")
    public String testPojo(User user){
        System.out.println(user);
        return SUCCESS;
    }
@Data
@AllArgsConstructor
public class User {
    private String name;
    private String password;
    private int age;
    private Address address;
}

使用原生servlet作為參數
支持的其他類型有

HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale
InputStream
OutputStream
Reader
Writer

<a href="springmvc/testServletApi?username='George'">testServletApi</a>
    @RequestMapping("/testServletApi")
    public void testServletApi(
            HttpServletRequest request
            ,HttpServletResponse response) throws IOException{
        String name = request.getParameter("username");
        response.getOutputStream().write(name.getBytes());
    }

傳參 @ModelAttribute修改數據

    <form action="springmvc/modifyEmp" method="post">
         編號:<input type="text" name="id" value="1"><br>
         姓名:<input type="text" name="name" value="Bruce"><br>
<!--         性別:<input type="text" name="sex" ><br>
    注意:該性別組件不能寫架馋,因為我們不希望修改Emp的性別屬性
 -->
        <button type="submit">修改</button>
    </form>
    @ModelAttribute
    public void getEmp(
            @RequestParam(value="id",required=false) Integer id
            ,Map<String,Object>map){
        
        //0.先從表單提交的數據中取出id,存在則繼續(xù)
        if (id!=null){
            //1.模擬到數據庫中查詢是否具有該id的Emp
            //2.假設已經查到了,emp是從數據庫中取回來的數據
            Emp emp = new Emp(2,"Smith","man");//數據庫中的原始數據
            map.put("emp", emp);
        }
    }
    
    @RequestMapping("/modifyEmp")
    public String testModelAttribute(Emp emp){
        System.out.println("修改后:"+emp);
        return SUCCESS;
    }
修改的后的數據:${requestScope.emp}
//修改的后的數據:Emp(id=1, name=Bruce, sex=man)

SpringMVC 確定目標方法 POJO 類型入參的過程
1. 確定一個 key:
* 目標方法的 POJO 類型的參數有沒有使用 @ModelAttribute 作為修飾, 有則 key 為 POJO 類名首字母小寫的字符串
* 若@ModelAttribute設置了value值, 則 key 為 @ModelAttribute 注解的 value 屬性值.

2. 在 implicitModel(@ModelAttribute修飾方法的model對象) 中查找 key 對應的對象, 若存在, 則作為入參傳入
* 若在 @ModelAttribute 標記的方法中用 Map或Model 保存過與1中key同名的對象碴里,那么將會獲取到該對象并傳入
3. 若 implicitModel 中不存在 key 對應的對象, 則檢查當前的Controller是否使用 @SessionAttributes 注解修飾
* 若使用了該注解, 且 @SessionAttributes 注解的 value 屬性值中包含了該key, 則會從 HttpSession 中來獲取 key 所對應的數據君仆。若包含了該key但沒有對應的數據則將拋出異常.
4. 若 Controller 沒有@SessionAttributes 注解或 @SessionAttributes 注解的 value 值中不包含該key
* 會通過反射來創(chuàng)建 POJO 類型的參數, 傳入為目標方法的參數
*5. SpringMVC 會把 key 和 POJO 類型的對象保存到 implicitModel 中, 進而會保存到 request 中. *

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市懒闷,隨后出現的幾起案子巩趁,更是在濱河造成了極大的恐慌,老刑警劉巖脯燃,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂妻,死亡現場離奇詭異,居然都是意外死亡辕棚,警方通過查閱死者的電腦和手機欲主,發(fā)現死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門邓厕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扁瓢,你說我怎么就攤上這事详恼。” “怎么了引几?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵单雾,是天一觀的道長。 經常有香客問我她紫,道長硅堆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任贿讹,我火速辦了婚禮渐逃,結果婚禮上,老公的妹妹穿的比我還像新娘民褂。我一直安慰自己茄菊,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布赊堪。 她就那樣靜靜地躺著面殖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哭廉。 梳的紋絲不亂的頭發(fā)上脊僚,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音遵绰,去河邊找鬼辽幌。 笑死,一個胖子當著我的面吹牛椿访,可吹牛的內容都是我干的乌企。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼成玫,長吁一口氣:“原來是場噩夢啊……” “哼加酵!你這毒婦竟也來了?” 一聲冷哼從身側響起哭当,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤猪腕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荣病,有當地人在樹林里發(fā)現了一具尸體码撰,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年个盆,在試婚紗的時候發(fā)現自己被綠了脖岛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朵栖。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柴梆,靈堂內的尸體忽然破棺而出陨溅,到底是詐尸還是另有隱情,我是刑警寧澤绍在,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布门扇,位于F島的核電站,受9級特大地震影響偿渡,放射性物質發(fā)生泄漏臼寄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一溜宽、第九天 我趴在偏房一處隱蔽的房頂上張望吉拳。 院中可真熱鬧,春花似錦适揉、人聲如沸留攒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炼邀。三九已至,卻和暖如春剪侮,著一層夾襖步出監(jiān)牢的瞬間拭宁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工票彪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留红淡,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓降铸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摇零。 傳聞我的和親對象是個殘疾皇子推掸,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容