常用注解
1. RequestParam
作用
把请求中指定名称的参数给控制器中的形参赋值
属性:
value: 请求参数中的名称
required: 请求参数中是否必须提供此参数。默认值true.表示必须提供,如果不提供将会报错
例如:
public String requestParamText(@RequestParam("name") String username) 其中name是表单中给定的name
name 会把值赋给username
2.RequestBody
作用:
用于获取请求内容。直接使用得到是key=value&key=value....结构的数据。
get请求方式不适合
属性:
required:是否必须有请求体。默认值true.当取值为true时,get请求方法会报错。如果取值为false ,get
请求得到是null
例如:
public String requestParamText(@RequestBody String body) 这样就可以直接拿到请求体中的内容
key=value形式。
3.PathVaribale
作用:用于绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。
url支持占位符是spring3.0之后加入的。是springMVC支持rest风格url的一个重要标志。
属性:
value:用于指定url中占位符名称
required: 是否必须提供占位符
例如:
public String requestParamText(@PathVariable String body)
4.基于HiddentHttpMethodFilter的示例
作用:
由于浏览器from表单只支持GET与Post请求,而DELETE, PUT等method并比支持,Spring3.0添加了一个过滤 器,可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持Get,post,put与DElETE请求
使用方法:
第一步:在web.xml中配置该过滤器
第二部:请求方式必须使用post请求
第三步:按照要求提供_method请求参数,该参数的取值就是我们需要的请求方式。
5.RequestHander
作用:
用于获取请求消息头
属性:
value:提供消息头名称
required: 是否必须有次消息头
注:
在实际开发中一般不怎么用
例如:
public String requestParamText(@RequestHander(value="写要获取的请求头") String body)
6.CookieValue
作用:
用于指定Cookie名称的值传入控制器方法参数。
属性:
value:指定cookie的名称
required:是否必须有此cookie
客户端向服务器端发请求一定会在服务器端创建一个session空间然后通过cookie的形式会把session写回来
id是JSESSIONID
例如:
public String requestParamText(@CookieValue(value="JSESSIONID")(value="写要获取的请求头") String cookieValue)
7.ModelAttribute
作用:
该注解是springmvc4.3版本以后新加入的。它可以修饰方法和参数。
出现在方法上,表示当前方法会在控制器的方法执行之前先执行,它可以修饰没有返回值的方法,也可以修饰有 有具体返回值的方法
出现在参数上,获取指定的数据给参数赋值
属性:
value:
用于获取数据的key,key可以是POJO的属性名称,也可以是map结构的key。
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据
例如:
我们在编写一个用户时,用户有一个创建信息字段,该字段的只是不允许被修改的。在提交表单数据是肯定 没有此字段的内容,一旦更新会把该字段内容置为null。此时就可以使用此注解解决问题。
例如:
1. 方法有返回值的
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("问世间什么最美丽爱情绝对是个奇迹");
System.out.println(user);
return "success";
}
@ModelAttribute
public User setModel(String name) {
//这里执行的是查询操作然后放到上面的方法中
User user = new User();
user.setId(1);
user.setName(name);
user.setBirthday(new Date());
return user;
}
2. 没有返回值的
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user) {
System.out.println("问世间什么最美丽爱情绝对是个奇迹");
System.out.println(user);
return "success";
}
@ModelAttribute
public void setModel(String name, Map<String, User> map) {
User user = new User();
user.setId(1);
user.setName(name);
user.setBirthday(new Date());
map.put("abc", user);
}
8.SessionAttribute
作用:
用于多次执行控制器方法间的参数共享
属性:
value:用于指定存入的属性名称
type: 用于指定存入的数据类型
注意此注解只能放到类上。
@SessionAttributes(value={"msg"})
public void xxxx(){}
HttpServletRequest request.这个耦合度太高,需要导包。springMVC就提供了Model类
//底层存储到rquest域对象中
Model model.addAttribute("msg","任苗苗");
在类中取出来 用他的实现类.ModelMap modelMap
modelMap.get("msg")
//删除session域中的值,使用 SessionStatus sessionStatus
sessionStatus.setComplete();