【附】SpringMVC 注解总结
@RequestMapping
一、作用
用于建立请求 URL 和处理请求方法之间的对应关系
二、出现的位置
【1】类上:
代表请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。 它出现的目的是为了使我们的 URL 可以按照模块化管理:
例如:
账户模块 | 订单模块 |
---|---|
/account/add | /order/add |
/account/update | /order/update |
/account/delete | /order/delete |
account / order 部分的 @RequsetMappding() 写在类上,使 URL 更加精细。
细节:
1、 URL 路径可以不编写 /,表示从应用的根目录开始
2、${ pageContext.request.contextPath }
也可省略不写,但路径上不能写 /
<a href="${pageContext.request.contextPath}/account/add">添加账户 </a>
<a href="account/findAccount">查询账户</a>
【2】出现在方法上:
请求 URL 的第二级访问目录。
三、属性
属性 | 作用 |
---|---|
value | 用于指定请求的 URL。和 path 属性的作用一样。 |
method |
用于控制请求的方式。 取值: RequestMethod.GET、RequestMethod.POST |
params |
用于指定限制请求参数的条件。 它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。例如: params = {“accountName”}:表示请求参数必须有 accountName params = {“moeny!100”}:表示请求参数中 money 不能是 100。 |
headers | 用于指定限制请求消息头的条件。 |
注意: 以上四个属性只要出现 2 个或以上时,他们的关系是 && 的关系。
method 属性的示例
method = RequestMethod.POST —> 必须是 POST请求。
@RequestMapping(value="/saveAccount",method = RequestMethod.POST)
public String saveAccount() {
System.out.println("保存了账户");
return "success";
}
<!-- 请求方式的示例 -->
<a href="account/saveAccount">保存账户,get 请求</a>
<form action="account/saveAccount" method="post">
<input type="submit" value=" 保存账户,post请求 ">
</form>
当使用 get 请求时,提示错误信息是 405,信息是方法不支持 get 方式请求
params 属性的示例
@RequestMapping(value="/saveAccount", params= {"accountName","money>100"})
public String saveAccount() {
System.out.println("删除账户");
return "success";
}
<a href="account/removeAccount?accountName=aaa&money>100">删除账户,金额 100</a> <br/>
<a href="account/removeAccount?accountName=aaa&money>150">删除账户,金额 150</a>
当点击第一个超链接时,可以访问成功。
当点击第二个超链接时,无法访问。--> 400
@ RequestParam
作用: 把请求中指定名称的参数给控制器中的形参赋值。
属性 | 意义 |
---|---|
value | 指定请求参数中的名称 |
required | 请求参数中是否必须提供此参数。 默认值:true。表示必须提供,当required 为 true 时,如果请求中必须提供此参数,不提供将报错 |
示例:
<a href="springmvc/useRequestParam?name=test">requestParam 注解</a>
@RequestMapping("/useRequestParam")
public String useRequestParam(@RequestParam("name")String username,
@RequestParam(value="age", required=false)Integer age){
System.out.println(username + "," + age);
return "success";
}
表示在请求中,必须提供 key 为 name 的参数。
@ RequestBody
作用: 用于获取请求体内容。直接使用得到是 key=value&key=value… 结构的数据。 GET 请求方式不适用。
属性 | 意义 |
---|---|
required | 是否必须有请求体。默认值是:true。 如果取值为 true 时, get 请求方式会报错。 如果取值为 false,get 请求得到是 null。 |
示例:
@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required = false) String bodyMsg){
System.out.println(bodyMsg);
return "success";
}
post 请求运行结果: username=xxx&password=xxx
get :null
<form action="springmvc/useRequestBody" method="post">
用户名称:<input type="text" name="username"> <br/>
用户密码:<input type="password" name="password">
<input type="submit" value=" 保存 ">
</form>
<a href="springmvc/useRequestBody?bodyMsg = test">get请求</a>
@ PathVaribale
作用: 用于绑定 url 中的占位符。
- 例如:请求 url 中: /delete/{id},{id} 就是 url 占位符。 Spring3.0 之后加入 url 支持占位符。是 SpringMVC 支持 Rest 风格 URL 的一个重要标志。
属性 | 意义 |
---|---|
value | 用于指定 url 中占位符名称 |
required | 是否必须提供占位符。 |
示例:
@RequestMapping("/PathVariable_DEMO/{uid}")
public String PathVariable_DEMO(@PathVariable String id){
System.out.println(id); //输出 100
return "success";
}
<a href="springmvc/PathVariable_DEMO/100">pathVariable注解</a>
@ RequestHeader
作用: 用于获取请求消息头。
属性 | 意义 |
---|---|
value | 提供消息头名称,用于获取该头信息 |
required | 是否必须有此消息头 |
注: 在实际开发中一般不怎么用。
示例:
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value="Accept-Language",
required = false)String requestHeader{
System.out.println(requestHeader);
return "success";
}
<a href="springmvc/useRequestHeader">获取请求消息头</a>
@ CookieValue
作用: 用于把指定 cookie 名称的值传入控制器方法参数。
属性 | 意义 |
---|---|
value | 指定 cookie 的名称。 |
required | 是否必须有此 cookie。 |
示例:
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value="JSESSIONID",
required=false) String cookieValue){
System.out.println(cookieValue);
return "success";
}
<a href="springmvc/useCookieValue">绑定浏览器cookie的值</a>
@ ModelAttribute
作用: 该注解是 SpringMVC4.3 版本以后新加入。它可以用于修饰方法和参数。
-
出现在方法上:表示当前方法会在控制器的方法执行之前,先执行。它可任意方法。
-
出现在参数上:获取指定的数据,并给参数赋值。
属性 | 意义 |
---|---|
value | 用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。 |
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
方式一:出现在方法上
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="uname"/><br/>
用户年龄:<input type="text" name="age"/><br/>
<input type="submit" value="提交"/>
</form>
假如 User 有 uname、age、data 字段,但是只是提交了 2 个字段。
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("该user是在showModel()中返回的user" + user.toString());
return "success";
}
@ModelAttribute
public User showModel(String name) {
User user = findByName(name); //查询数据库
return user;
}
假如没有 @ModelAttribute 方法,当传递2个参数(不完整)时,date就会输出 null,
而当反之,输出user之前,查询了 数据库,返回的user对象,输出时date就有了!
方式二:出现在参数上
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("userKey") User user) {
System.out.println("该user是在showModel()中设置的user" + user.toString());
return "success";
}
@ModelAttribute
public void showModel(String name) {
User user = findByName(name); //查询数据库
map.put("userKey", user);
}
@ SessionAttribute
作用:只作用在类上,用于多次执行控制器方法间的参数共享。
属性:
属性 | 意义 |
---|---|
value | 用于指定存入的属性名称 |
type | 指定存入的数据的类型。 |
示例:
<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", "age"},
types={String.class, Integer.class})
public class SessionAttributeController {
@RequestMapping("/testPut")
public String testPut(Model model){ //反射创建实现类
System.out.println("向session域中保存数据")
model.addAttribute("username", "泰斯特");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
//跳转之前将数据保存到 username、password 和 age 中,
///因为注解 @SessionAttribute 中有这几个参数
return "success";
}
@RequestMapping("/testGet")
public String testGet(ModelMap model){
String username = (String) modelMap.get("username");
String password = (String) modelMap.get("password");
Integer age = (Integer) modelMap.get("age");
return "success";
}
@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){
sessionStatus.setComplete(); //将状态设置为 "完成"
return "success";
}
}
Model 是 Spring 提供的一个接口,ExtendedModelMap继承并实现了ModelMap,而 ModelMap 就是 LinkedHashMap 的子类。
上一篇: django 图片上传并显示
下一篇: springMVC注解总结