springMvc 系列 4-常用的注解
前提:在控制器中添加注解 @RequestMapping("/param")
-
RequestParam注解
- 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性
- value: 请求参数中的名称
- required: 请求参数中是否必须提供此参数,默认是true,必须提供
比如:
<a href="param/testRequestParam?username=xiaowang">RequestParam</a>
@RequestMapping(path = "/testRequestParam") public String testRequestParam(@RequestParam(value = "username", required = false)String name){ System.out.println(name); return "success"; }
-
RequestBody注解
- 用于请求体的内容(注意:get方法不可以)
- 属性
- required:是必须有请求体,默认是true
例如:
- required:是必须有请求体,默认是true
RequestBody: <form action="param/testRequestBody" method="post"> 姓名:<input type="text" name="uname"> 出生日期:<input type="text" name="birthday"> <input type="submit" value="提交"> </form> @RequestMapping("/testRequestBody") public String testRequestBody(@RequestBody String body){ System.out.println(body); return "success"; }
页面上填写姓名:wang;出生日期:2000/11/11,提交以后,将打印出
uname=wang&birthday=2000%2F11%2F11
-
PathVariable注解
- 作用:拥有绑定url中的占位符。例如:url中有/delete/{id},{id}就是占位符
- 属性
- vlue: 指定url中的占位符名称
- Restful风格的URL
- 请求路径一样,可以根据不同的请求方式执行后台的不同方法
- restful风格的URL有点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
例如:
<a href="param/testPathVariable">PathVariable</a> @RequestMapping("testPathVariable") public String testPathVariable(@PathVariable(value = "id") String id){ System.out.println(id); return "success"; }
-
RequestHeader注解
- 作用: 获取指定请求头的值
- 属性:
- value: 请求头的名称
例如:
- value: 请求头的名称
@RequestMapping("testRequestHeader") public String testRequestHeader(@RequestHeader(value = "Accept") String header){ System.out.println(header); return "success"; }
-
CookieValue注解
- 作用: 用于获取指定cookie的名称和值
- 属性:
- value: cookie的名称
例如:
- value: cookie的名称
@RequestMapping("testCookieValue") public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue){ System.out.println(cookieValue); return "success"; }
-
ModelAttribute注解
- 作用:
- 在方法上:表示当前方法会在控制器方法执行前执行
- 在参数上: 获取指定的数据给参数赋值
- 应用场景:当提交的数据不是完整的实体数据时,可以从数据库中获取未提交单库中存在的数据
- 实例:
- 修饰的方法有返回值
ModelAttribute: <form action="param/testModelAttribute" method="post"> 姓名:<input type="text" name="uname"> 年龄:<input type="text" name="age"> <input type="submit" value="提交"> </form> @RequestMapping("/testModelAttribute") public String testModelAttribute(User user){ System.out.println("然后执行testModelAttribute"); System.out.println(user); return "success"; } @ModelAttribute public User showUser(String uname){ System.out.println("先执行showUser"); User user = new User();//模拟通过用户查询数据库得到的信息 user.setUname(uname); user.setBirthday(new Date()); return user; }
- 修饰的方法没有返回值
@RequestMapping("testModelAttribute") public String testModelAttribute(@ModelAttribute("adc") User user){ System.out.println(user); return "success"; } @ModelAttribute public void showUser(String uname, Map<String, User> map){ User user = new User();//模拟通过用户查询数据库得到的信息 user.setUname(uname); user.setBirthday(new Date()); map.put("adc",user); }
- 作用:
-
SessionAttributes注解
- 作用: 用于多次执行控制器方法间的参数共享
- 属性:
value: 指定存入属性的名称
例子:
首先在类上添加注解@SessionAttributes(value={"msg"})//把msg=张三 存入到session域对象中
<a href="param/setSessionAttributes">SessionAttributes</a> <a href="param/getSessionAttributes">get</a> <a href="param/delSessionAttributes">del</a> @RequestMapping("/setSessionAttributes") public String setSessionAttributes(Model model){ System.out.println("testSessionAttributes"); //底层会存储到request域对象中 model.addAttribute("msg","张三"); return "success"; } @RequestMapping("/getSessionAttributes") public String getSessionAttributes(ModelMap modelMap){ String msg = (String) modelMap.get("msg"); System.out.println(msg); return "success"; } @RequestMapping("/delSessionAttributes") public String delSessionAttributes(SessionStatus status){ status.setComplete(); return "success"; }