SpingMVC常用注解

网友投稿 605 2022-05-30

### 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

*/

SpingMVC的常用注解

@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 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";

}

}

```

数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:边缘是开放的:无开放混合云就无横向扩展计算
下一篇:从零开始学python | Python迭代器:什么是Python中的迭代器,以及如何使用它?
相关文章