Spring·基础入门篇(十六) SpringMVC常用注解
1. RequestParam
1.1 使用说明
作用:
- 把请求中指定名称的参数给控制器中的形参赋值
属性:
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错
1.2 使用示例
jsp:
控制器:
1. RequestParam
1.1 使用说明
作用:
- 把请求中指定名称的参数给控制器中的形参赋值
属性:
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错
1.2 使用示例
jsp:
<!-- requestParams 注解的使用 -->
<a href="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";
}
运行结果:
2. RequestBody
2.1 使用说明
作用:
- 用于获取请求体内容。直接使用得到是key=value&key=value…结构的数据。
- get 请求方式不适用。
属性:
- required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false,get 请求得到是 null
2.2 使用示例
post 请求 jsp:
<!-- request body 注解 -->
<form action="springmvc/useRequestBody" method="post">
用户名称:<input type="text" name="username" ><br/>
用户密码:<input type="password" name="password" ><br/>
用户年龄:<input type="text" name="age" ><br/>
<input type="submit" value="保存">
</form>
get 请求 jsp:
<a href="springmvc/useRequestBody?body=test">requestBody 注解 get 请求</a>
控制器:
@RequestMapping("/useRequestBody")
public String useRequestBody(@RequestBody(required = false) String body) {
System.out.println(body);
return "success";
}
post请求运行结果:
get请求运行结果:
3. PathVaribale
3.1 使用说明
作用:
- 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。
- url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志
属性:
- value:用于指定 url 中占位符名称。
- required:是否必须提供占位符。
3.2 使用示例
jsp:
<!-- PathVariable 注解 -->
<a href="usePathVariable/100">pathVariable 注解</a>
控制器:
@RequestMapping("/usePathVariable/{id}")
public String usePathVariable(@PathVariable("id") Integer id) {
System.out.println(id);
return "success";
}
运行结果:
3.3 REST 风格 URL
什么是rest:
- REST(英文:Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。
- 在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,REST 都倾向于用更加简单轻量的方法设计和实现。值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格。它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口。
restful 的优点:
- 它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
restful 的特性:
- 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息
- 表现层(Representation):把资源具体呈现出来的形式
- 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程
HTTP 协议里面,四个表示操作方式的动词:
- GET 用来获取资源
- POST 用来新建资源
- PUT 用来更新资源
- DELETE 用来删除资源
restful 的示例:
- /account/1 HTTP GET : 得到 id = 1 的 account
- /account/1 HTTP DELETE: 删除 id = 1 的 account
- /account/1 HTTP PUT: 更新 id = 1 的 account
- /account HTTP POST: 新增 account
4. RequestHeader
4.1 使用说明
作用:
- 用于获取请求消息头
属性:
- value:提供消息头名称
- required:是否必须有此消息头
4.2 使用示例
jsp:
<!-- RequestHeader 注解 -->
<a href="useRequestHeader">获取请求消息头</a>
控制器:
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value = "Accept-Language",
required = false) String requestHeader) {
System.out.println(requestHeader);
return "success";
}
运行结果:
5. CookieValue
5.1 使用说明
作用:
- 用于把指定 cookie 名称的值传入控制器方法参数
属性:
- value:指定 cookie 的名称
- required:是否必须有此 cookie
5.2 使用示例
jsp:
<!-- CookieValue 注解 -->
<a href="useCookieValue">绑定 cookie 的值</a>
控制器:
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value = "JSESSIONID", required = false) String cookieValue) {
System.out.println(cookieValue);
return "success";
}
运行结果:
6. ModelAttribute
6.1 使用说明
作用:
- 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数
- 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法
- 出现在参数上,获取指定的数据给参数赋值
属性:
- value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key
应用场景:
- 当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据
6.2 使用示例
修饰的方法没有返回值
作用在方法,先执行
jsp:
<!-- ModelAttribute 注解的基本使用 -->
<a href="testModelAttribute?username=test">测试 modelattribute</a>
控制器:
@ModelAttribute
public void showModel(User user) {
System.out.println("执行了 showModel 方法" + user.getUsername());
}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("执行了控制器的方法" + user.getUsername());
return "success";
}
运行结果:
修饰方法带返回值
修改用户信息,要求用户的密码不能修改
jsp:
<form action="updateUser" method="post">
用户名称:<input type="text" name="username" ><br/>
用户年龄:<input type="text" name="age" ><br/>
<input type="submit" value="保存">
</form>
控制器:
@ModelAttribute
public User showModel(String username) {
//模拟去数据库查询
User abc = findUserByName(username);
System.out.println("执行了 showModel 方法"+abc);
return abc;
}
@RequestMapping("/updateUser")
public String testModelAttribute(User user) {
System.out.println("控制器中处理请求的方法:修改用户:"+user);
return "success";
}
private User findUserByName(String username) {
User user = new User();
user.setUsername(username);
user.setAge(19);
user.setPassword("123456");
return user;
}
运行结果:
7. SessionAttribute
7.1 使用说明
作用:
- 用于多次执行控制器方法间的参数共享
属性:
- value:用于指定存入的属性名称
- required:用于指定存入的数据类型
7.2 使用示例
jsp:
<!-- SessionAttribute 注解的使用 -->
<a href="save">存入 SessionAttribute</a>
<a href="find">取出 SessionAttribute</a>
<a href="delete">清除 SessionAttribute</a>
控制器:
@Controller
@SessionAttributes(value = {"username", "password", "age"}, types = {String.class, Integer.class}) // 把数据存入到session域对象中
public class SessionController {
/**
* 向session中存入值
*
* @return
*/
@RequestMapping(path = "/save")
public String save(Model model) {
System.out.println("向session域中保存数据");
model.addAttribute("username", "root");
model.addAttribute("password", "123");
model.addAttribute("age", 20);
return "success";
}
/**
* 从session中获取值
* @return
*/
@RequestMapping(path = "/find")
public String find(ModelMap modelMap) {
String username = (String) modelMap.get("username");
String password = (String) modelMap.get("password");
Integer age = (Integer) modelMap.get("age");
System.out.println(username + " : " + password + " : " + age);
return "success";
}
/**
* 清除值
* @return
*/
@RequestMapping(path = "/delete")
public String delete(SessionStatus status) {
status.setComplete();
return "success";
}
}
运行结果:
1. RequestParam
1.1 使用说明
作用:
- 把请求中指定名称的参数给控制器中的形参赋值
属性:
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错
1.2 使用示例
jsp:
控制器: