SpringMVC 常用注解
常用注解
-
RequestParam注解
-
作用:把请求中的指定名称的参数传递给控制器中的形参赋值 (作用于形参列表)
-
属性
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数,默认值是true,必须提供
@RequestMapping("/useRequestParam") public String useRequestParam(@RequestParam("name")String username, @RequestParam(value="age",required=false)Integer age){ System.out.println(username+","+age); return "success"; }
-
-
RequestBody注解
-
作用:用于获取请求体的内容(注意:get方法不可以)
-
属性
- required:是否必须有请求体,默认值是true
<form action="springmvc/useRequestBody" method="post"> 用户名称:<input type="text" name="username" ><br/> 用户密码:<input type="password" name="password" ><br/> 用户年龄:<input type="text" name="age" ><br/> <input type="submit" value="保存"> </form>
@RequestMapping("/useRequestBody") public String useRequestBody(@RequestBody(required=false) String body){ System.out.println(body); return "success"; }
-
-
PathVariable注解
-
作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
-
属性
- value:指定url中的占位符名称
-
Restful风格的URL
- 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
- restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
jsp 代码: <!-- PathVariable 注解 --> <a href="springmvc/usePathVariable/100">pathVariable 注解</a>
控制器代码: @RequestMapping("/usePathVariable/{id}") public String usePathVariable(@PathVariable("id") Integer id){ System.out.println(id); return "success"; }
-
-
RequestHeader注解
-
作用:获取指定请求头的值
-
属性
- value:请求头的名称
ps:实际开发不怎么用
-
-
CookieValue注解
- 作用:用于获取指定cookie的名称的值
- 属性
- value:cookie的名称
- required:是否必须有此 cookie。
@RequestMapping("/useCookieValue") public String useCookieValue(@CookieValue(value="JSESSIONID",required=false) String cookieValue){ System.out.println(cookieValue); return "success"; }
-
ModelAttribute注解
-
作用
- 出现在方法上:表示当前方法会在控制器方法执行前先执行。
- 出现在参数上:获取指定的数据给参数赋值。
-
应用场景
当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
控制器代码: 控制器中的代码: /** * 查询数据库中用户信息 * @param user */ @ModelAttribute public void showModel(String username,Map<String,User> //模拟去数据库查询 User user = findUserByName(username); System.out.println("执行了 showModel 方法"+user); map.put("abc",user); } /** * 模拟修改用户方法 * @param user * @return */ @RequestMapping("/updateUser") public String testModelAttribute(@ModelAttribute("abc")User user) { System.out.println("控制器中处理请求的方法:修改用户:"+user); return "success"; } /** * 模拟去数据库查询 * @param username * @return */ private User findUserByName(String username) { User user = new User(); user.setUsername(username); user.setAge(19); user.setPassword("123456")return user; }
-
-
SessionAttributes注解
-
作用:用于多次执行控制器方法间的参数共享
-
属性
- value:指定存入属性的名称
- type:用于指定存入的数据类型。
jsp 中的代码: <!-- SessionAttribute 注解的使用 --> <a href="springmvc/testPut">存入 SessionAttribute</a> <hr/> <a href="springmvc/testGet">取出 SessionAttribute</a> <hr/> <a href="springmvc/testClean">清除 SessionAttribute</a>
控制器的代码: @RequestMapping("/springmvc") @SessionAttributes(value ={"username","password"},types={Integer.class}) public class SessionAttributeController { /** * 把数据存入 SessionAttribute * @param model * @return * Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap * 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类 */ @RequestMapping("/testPut") public String testPut(Model model){ model.addAttribute("username", "泰斯特"); model.addAttribute("password","123456"); model.addAttribute("age", 31); //跳转之前将数据保存到 username、password 和 age 中,因为注解@SessionAttribute 中有这几个参数 return "success"; } @RequestMapping("/testGet") public String testGet(ModelMap model){ System.out.println(model.get("username")+";"+model.get("password")+";"+model.get("age")); return "success"; } @RequestMapping("/testClean") public String complete(SessionStatus sessionStatus){ sessionStatus.setComplete(); return "success"; } }
-