1、@RequestParam
1.1、请求
<a href="test?userName=刘阳">测试</a>
1.2、处理方法
//当请求参数名和处理方法的参数名不一致时可使用@RequestParam注解解决 @RequestMapping("/test") public String test(@RequestParam("userName") String name) { System.out.println(name); return "success"; }
2、@PathVariable
2.1、请求
<a href="test/liuyang/101">测试</a>
2.2、处理方法
//@PathVariable可以解决REST风格的请求URL中的占位符和处理方法的参数的对应问题 @RequestMapping("/test/{userName}/{mid}") public String test(@PathVariable("userName") String name, @PathVariable("mid") Integer id) { System.out.println(name); System.out.println(id); return "success"; }
3、@ModelAttribute
3.1、需求
User对象有userName、age、password三个属性,修改时password不能被修改,默认情况下,处理方法在绑定User对象时表单中没有的字段会为null,而我们需要的是数据库中字段的值
3.2、请求
<form action="test" method="post"> userName:<input type="text" name="userName"><br> age:<input type="text" name="age"><br> <input type="submit" value="提交"> </form>
3.3、解决方法
3.3.1、解决方法1-@ModelAttribute标记的方法有返回值
3.3.1.1、处理方法
@RequestMapping("/test") public String test(User u) { System.out.println(u); return "success"; }
3.3.1.2、@ModelAttribute标记的方法
//@ModelAttribute修饰的方法会在处理方法执行前执行 @ModelAttribute public User testModelAttribute(String userName) { System.out.println(userName); User user = new User();//模拟根据userName从数据库中查询User对象 user.setPassword("123456"); System.out.println(user); return user; }
3.3.2、解决方法2-@ModelAttribute标记的方法没有返回值
3.3.2.1、处理方法
@RequestMapping("/test") public String test(@ModelAttribute("abc") User u) { System.out.println(u); return "success"; }
3.3.2.2、@ModelAttribute标记的方法
//@ModelAttribute修饰的方法会在处理方法执行前执行 @ModelAttribute public void testModelAttribute(String userName,Map<String,Object> map) { System.out.println(userName); User user = new User();//模拟根据userName从数据库中查询User对象 user.setPassword("123456"); System.out.println(user); map.put("abc",user); }