springmvc常用注解
REST
HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
例:
/order/1 HTTP GET :得到 id = 1 的 order
/order/1 HTTP DELETE:删除 id = 1的 order
/order/1 HTTP PUT:更新id = 1的 order
/order HTTP POST:新增 order
HiddenHttpMethodFilter:
浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。
Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应人参中。
可以对方法及方法入参标注相应的注解(@PathVariable、@RequestParam、@RequestHeader 等)。
@RequestMapping
用作映射请求,为控制器指定指定URL 请求被接受处理,在控制器的类定义及方法定义处都可标注。
DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@Controller
@RequestMapping("/hello")
public class HelloWorld {
@RequestMapping("/helloworld")
public String hello(){
}
}
@RequestMapping 除了可以指定请求 URL 外,还可以指定其它参数。
@RequestMapping参数:
value:请求URL
method:请求方法
params:请求参数
heads:请求头
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces:指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码;
params 和 headers支持简单的表达式:
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值
不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2
的两个请求参数,且 param1 参数的值必须为 value1
@RequestMapping(value="/helloworld2",headers={"User-Agent"},params={"username=root","password","!age"},produces="application/json;charset=utf-8",method={RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public User hello2(){
return new User("sdfsdf","sdf","234234@qq.com",1);
}
表示接受请求地址/helloword2,头信息必须包含User-Agent;请求参数中包含username、password,不包含age,并且请求参数username=root;接受请求处理的内容为json;返回的内容类型为json类型,并且是utf-8编码;请求方法是post
@RequestMapping 支持的 Ant 风格的 URL:
?:匹配文件名中的一个字符
*:匹配文件名中的任意字符
**:** 匹配多层路径
例:
/user/*/createUser: 匹配/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL
@PathVariable
带占位符的 URL 是 Spring3.0 新增的功能。
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
@RequestMapping("/delete/{id}")
public String hello3(@PathVariable Integer id){
return "";
}
@RequestParam
可以把请求参数传递给请求方法。
@RequestMapping("/hello")
public String hello4(@RequestParam(value="id",required=true) Integer id){
return "";
}
@RequestHeader
可将请求头中的属性值绑定到处理方法的入参中。
@RequestMapping("/hello")
public String hello4(@RequestHeader(value="id",required=true) Integer id){
return "";
}
@CookieValue
可让处理方法入参绑定某个 Cookie 值。
@RequestMapping("/hello")
public String hello4(@CookieValue(value="id",required=true) Integer id){
return "";
}
使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等
/hello?dept.deptId=1&dept.address.tel=18000000
@SessionAttributes
@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定。
@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/springmvc")
@Controller
public class SpringMVC {
}
session属性获取:
方式一:
@RequestMapping("/testSessionAttributes2")
@ResponseBody
public User testSessionAttributes2(@ModelAttribute("user") User user){
return user;
}
方式二:
@ResponseBody
public User testSessionAttributes2(Map<String, Object> map,SessionStatus sessionStatus){
System.out.println(sessionStatus);
return (User) map.get("user");
}
@ModelAttribute
方法入参标注该注解后, 入参的对象就会放到数据模型中。
有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用!
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
- 从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
- 将方法入参对象添加到模型中
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,
Map<String, Object> map){
}
在标注了@SessionAttribute的类上,如果在会话中找不到对应的属性,则抛出 HttpSessionRequiredException 异常。所以@SessionAttribute可以配合@ModelAttribute使用。
@InitBinder
由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定@InitBinder方法不能有返回值,它必须声明为void。@InitBinder方法的参数通常是是 WebDataBinder。