SpingMVC的常用注解

举报
愫暮 发表于 2020/07/29 10:41:24 2020/07/29
【摘要】 ### 1.RequestMapping注解- RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系- RequestMapping注解可以作用在方法和类上 1. 作用在类上:第一级的访问目录 2. 作用在方法上:第二级的访问目录 3. 细节:路径可以不编写 / 表示应用的根目录开始 4. ==细节:${ pageContext.request.contex...

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

    }

}

```


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。