SpingMVC的常用注解
### 1.RequestMapping注解
- RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
- RequestMapping注解可以作用在方法和类上
1. 作用在类上:第一级的访问目录
2. 作用在方法上:第二级的访问目录
3. 细节:路径可以不编写 / 表示应用的根目录开始
4. ==细节:${ pageContext.request.contextPath }也可以省略不写,但是路径上不能写/==
- RequestMapping的属性
1. path 指定请求路径的url
2. value value属性和path属性是一样的
3. mthod 指定该方法的请求方式
4. params 指定限制请求参数的条件
5. headers 发送的请求中必须包含的请求头
### 2.RequestParam注解
- 把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性
1. value:请求参数中的名称
2. required:表示请求参数中是否必须提供此参数,默认值是true,必须提供
```java
public String sayHello(@RequestParam(value="username",required=false)String name)
```
### 3.RequestBody注解
- 用于获取请求体的内容(注意:get方法不可以)
- 属性:required:是否必须有请求体,默认值是true
```java
public String sayHello(@RequestBody(required=false) String body)
```
### 4.PathVariable注解
- 拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性:value:指定url中的占位符名称
```java
public String sayHello(@PathVariable(value="id") String id)
```
**Restful风格的URL**
1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
2. restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
### 5.RequestHeader注解
- 获取指定请求头的值
- 属性:value:请求头的名称
```java
public String sayHello(@RequestHeader(value="Accept") String header)
```
### 6.CookieValue注解
- 用于获取指定cookie的名称的值
- 属性:value:cookie的名称
```java
public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue)
```
### 7.ModelAttribute注解
- 作用
1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
2. 出现在参数上:获取指定的数据给参数赋值。
- 应用场景:当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
**修饰的方法有返回值**
```java
/**
* 作用在方法,先执行
* @param name
* @return
*/
@ModelAttribute
public User showUser(String name) {
System.out.println("showUser执行了...");
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
return user;
}
/**
* 修改用户的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(User user) {
System.out.println(user);
return "success";
}
```
**修饰的方法没有返回值**
```java
/**
* 作用在方法,先执行
* @param name
* @return
*/
@ModelAttribute
public void showUser(String name,Map<String, User> map) {
System.out.println("showUser执行了...");
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
map.put("abc", user);
}
/**
* 修改用户的方法
* @param cookieValue
* @return
*/
@RequestMapping(path="/updateUser")
public String updateUser(@ModelAttribute(value="abc") User user) {
System.out.println(user);
return "success";
}
```
**ModelAttribute注释一个方法的参数**
```java
@ModelAttribute("user")
public User addAccount() {
return new User("jz","123");
}
@RequestMapping(value = "/helloWorld")
public String helloWorld(@ModelAttribute("user") User user) {
user.setUserName("jizhou");
return "helloWorld";
}
```
==在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。==
### 8.SessionAttribute注解
- 用于多次执行控制器方法间的参数共享。
- 属性:
1. value:用于指定存入的属性名称
2. type:用于指定存入的数据类型。
```java
@Controller
@RequestMapping(path="/user")
@SessionAttributes(value ={"username","password"},types={Integer.class})
public class SessionAttributeController {
/**
* 把数据存入 SessionAttribute
* @param model
* @return
* Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap
* 该类继承了 ModelMap,而 ModelMap 就是 LinkedHashMap 子类
*/
@RequestMapping("/testPut")
public String testPut(Model model){
model.addAttribute("username", "泰斯特");
model.addAttribute("password","123456");
model.addAttribute("age", 31);
//跳转之前将数据保存到 username、password 和 age 中,因为注解@SessionAttribute 中有这几个参数
return "success";
}
/**
*从session中获取值
*@return
*/
@RequestMapping("/testGet")
public String testGet(ModelMap model){
System.out.println(model.get("username")+";"
+model.get("password")+";"+model.get("age"));
return "success";
}
/**
* 从session中清除值
* @return
*/
@RequestMapping("/testClean")
public String complete(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
}
```
- 点赞
- 收藏
- 关注作者
评论(0)