Spring MVC 注解
一、DispatcherServlet注解:@RequestMapping
@RequestMapping("welcome"):可作用于类/方法;
(1)value:目标地址;
1)?:任意单字符;
2)*:任意单层目录;
3)**:任意多层目录;
(2)method:指定请求类型;
//当映射名(RequestMapping)都相同时候,可通过不同的请求类型处理不同请求;
@RequestMapping(value = "",method = RequestMethod.POST)
(3)params:指定name参数;
1)params ={ "username"}:必须有一个名为username的name属性;
params ={ "username=zs"}:必须有一个名为username的name属性,且值必须是zs;
2)params ={ "username=zs","age!=12"}:名为age的name属性值不能为12,但可以为空;
3)params ={ "!height"}:不能有名为height的name属性;
(4)headers:指定请求头信息;
@RequestMapping(value = "welcome",headers = {"",""})
二、参数绑定注解:
(1)处理request uri注解:@PathVariable
@Controller public class SpringMVCHandler { @RequestMapping(value = "welcome/{id1}/{id2}") public String welcome(@PathVariable String id1,@PathVariable("id2") String id3){ return "success"; } }
1)@PathVariable;
2)@PathVariable("id2"):指定参数名;
3)@RequestParam(defaultValue = "1"):如果不传递参数,默认为1
(2)处理request header注解:@RequestHeader,@CookieValue;
1)@RequestHeader:
@Controller public class SpringMVCHandler { @RequestMapping(value = "welcome" ) public String welcome(@RequestHeader("Accept-Language") String language, @RequestHeader("Accept-Encoding") String encoding){ System.out.println(language); System.out.println(encoding); return "success"; } }
2)@CookieValue:
@Controller public class SpringMVCHandler { @RequestMapping(value = "welcome" ) public String welcome(@CookieValue("JSESSIONID") String cookie){ System.out.println(cookie); return "success"; } }
(3)处理request body注解:@RequestParam,@RequestBody;
1)@RequestParam:简单类型;
//@RequestParam(value = "id",required = false)
required = false:允许前端提交的表单不存在名为id的name属性;
//前端默认只能多传name属性,不能少传;
2)@RequestBody:json格式对象;
(4)处理attribute类型注解:@SessionAttributes,@ModelAttribute;
1)@SessionAttributes:作用于类;
//@SessionAttributes("pet"):如果把名为pet的属性存入requestScope,则同时会存放于sessionScope;
//@SessionAttributes(types="User.class,Student.calss"):
如果把类型为User/Student的属性存入requestScope,则同时会存放于sessionScope;
@Controller @RequestMapping("/editPet.do") @SessionAttributes("pet") public class EditPetForm { // ... }
2)@ModelAttribute:作用于方法/参数;
在任何一次请求前都会先执行@ModelAttribute修饰的方法,慎用;
@Controller public class AttributeTest { @ModelAttribute public void queryAttribute(Map<String,Object> map){ Student student = new Student(1, "zs", 12); //把student对象存入ModelAttribute; map.put("stu",student ); } @RequestMapping(value = "modelAttributeTest") public String setModelAttribute(@ModelAttribute(value = "stu") Student student){ student.setSname("ls"); System.out.println(student); return "success"; } }