SpringMVC_4_常用注解
1.RequestHeader
作用:用于将请求消息头和处理器形参绑定
属性:
value:提供消息头名称
required:是否必须有此消息头
@Controller public class handleHeader { @GetMapping("/getHeader") public String getRequestHeader(@RequestHeader("User-Agent") String agent) { System.out.println(agent); return "success"; } }
2.RequestParam
作用:把请求中的指定参数给处理器的形参赋值。
属性:
value/name: 请求中需要包含的属性
required: 若true,则请求中必须包含value指定的属性,若false,则不必须。默认true。
@RequestMapping("testRequestParam") public String testRequestParam(@RequestParam(name="username") String username){ System.out.println("username: "+username); return "success"; }
3.RequestBody
作用:用于获取请求体的内容。直接使用得到的是key=value&key=value的格式。
适合Post请求,get请求方式不适合。
@RequestMapping("testRequestBody") public String testRequestBody(@RequestBody String body){ System.out.println("body:"+body); return "success"; }
RequestBody最常见的用途是把.jsp传过来的JSON数据反序列化为一个java对象,例如:
1 @PostMapping("/request") 2 public ResponseEntity postController( 3 @RequestBody LoginForm loginForm) { 4 5 exampleService.fakeAuthenticate(loginForm); 6 return ResponseEntity.ok(HttpStatus.OK); 7 }
4.PathVariable
作用:用于绑定URL中的占位符。例如:请求url中/delete/{id},{id}就是占位符。
属性;
value:用于指定url中占位符名称。
required:是否必须提供占位符。
示例代码:
@RequestMapping("testPathVariable/{id}")
public String testPathVariable(@PathVariable(name="id") String id){
System.out.println("id:"+id);
return "success";
}
5.CookieValue
作用:把指定名称的cookie的值传入控制器方法参数
属性:
value:指定cookie的名称
required:是否必须有此cookie
6.ModelAttribute
作用:可以修饰方法和参数,SpringMVC4.3版本以后新加入。用于将方法参数或方法返回值作为Model的新属性。
出现在方法之上,表示当前方法将会在本类中处理器执行之前先执行。出现在参数之上,将获取指定的数据给参数赋值。
属性:
value:绑定的模型的名称。
6.1 当@ModelAttribute出现在方法之上:表示本方法将给Model添加一个或多个属性。
1 /** 2 * 无返回值的@ModelAttribute()修饰方法,作用是给Model对象添加一个或多个属性, 3 * 如果你不在方法体里面给Model对象添加属性,那这个方法就毫无意义了! 4 * @param val 5 * @param model 6 */ 7 @ModelAttribute() 8 public void voidModelAttributeMethod(Object val,Model model){ 9 model.addAttribute(val); //如果不指定key名称,会使用默认key(包名.小写类名) 10 }
1 /** 2 * 有返回值的@ModelAttribute()修饰方法,它的返回值会给Model对象充当属性. 3 */ 4 @ModelAttribute() 5 public Account ModelAttributeMethod(String email){ 6 return accountManager.findAccount(email);; 7 }
1 /** 2 * 给新添加的属性指定了名称的@ModelAttribute()修饰方法.指定的名称就是“AccountName” 3 */ 4 @ModelAttribute("AccountName") 5 public Account ModelAttributeMethod(String email){ 6 return accountManager.findAccount(email);; 7 }
6.2 当 出现在方法参数列表,表示从模型中取出模型属性填充到方法参数中。
When used as a method argument, it indicates the argument should be retrieved from the model.
When not present, it should be first instantiated and then added to the model and
once present in the model, the arguments fields should be populated from all request parameters that have matching names.
1 @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) 2 public String submit(@ModelAttribute("employee") Employee employee) { 3 // Code that uses the employee object 4 5 return "employeeView"; 6 }
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:
当修改用户信息时,只修改了用户邮箱和密码,没有修改用户生日、性别、籍贯、爱好等属性,因此表单提交过来的数据组成的bean会有一部分属性为null,这一部分属性的值将使用数据库中原来的值填充。
7.SessionAttribute
作用:用于多次执行控制器方法间的参数共享,只能用于类上。
属性:
value:用于指定存入的属性名称
type:用于指定存入的数据类型
给Request域添加键值对:给处理器添加Model类型参数:
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Model model){
System.out.println("testSessionAttribute方法执行了");
model.addAttribute("msg","918");
/*map.put("myUserKey",user);*/
return "success";
}
给Session域添加键值对: 在给Request域添加键值对后,在控制器上添加注解SessionAttribute(value={"键名"})
@Controller @RequestMapping("anno") @SessionAttributes(value = {"msg"})//把msg=918存入到session域中 public class AnnotationController {
查询Request的某个键值对:给处理器添加Model类型参数,在处理器内调用Model的getAttribute方法
删除Session域的键值对:给处理器添加SessionStatus类型参数,在处理器内调用setComplete方法

浙公网安备 33010602011771号