Spring5 | @RequestMapping

1.@RequestMapping概述

  1. 用于将请求和处理请求的控制器关联,建立映射关系
  2. 当SpringMVC接收到请求,就会找来映射关系种对应控制器方法处理此请求
  3. RequestMapping中一个value只能对应一个映射,否则将报错

1.1具体位置

  1. 可以写在类和方法上面
  2. 在类上面时,设置映射请求路径的初始信息
  3. 在方法上时,设置映射请求路径的具体信息
  4. 当存在多个具体信息路径相同时,即可以使模块较多时候用类上添加此注解用于做路径区分

1.2value属性

  1. value属性通过请求的请求地址匹配请求映射
  2. value属性是一个字符串类型数组,表示此映射能够匹配多个请求地址对应的请求
  3. value属性是必须设置的,最少要映射一个请求路径
    1
    2
    3
    4
    @RequestMapping(value = {"/test1","/test2"})
    public String index1(){
    return "valueTest";
    }
    1
    2
    <a th:href="@{/test1}">测试value属性->test1路径</a><br>
    <a th:href="@{/test2}">测试value属性->test2路径</a><br>

1.3method属性

  1. 通过请求方式来匹配请求映射
  2. 此属性是一个RequestMethod类型的数组,表示请求映射能匹配多种请求方式
  3. 若html文件的请求方式满足,但是method属性请求方式不满足,就会报错405
1
2
3
4
5
//测试method 指定请求方式
@RequestMapping(value = "/methods",method = {RequestMethod.GET})
public String index2(){
return "valueTest";
}
1
2
3
<form th:action="@{/methods}" method="get">
<input type="submit" name="提交">
</form>

1.4params属性

  1. 通过请求参数匹配请求映射
  2. params属性是一个字符串类型数组

四种params匹配机制

1
2
3
4
@RequestMapping(value = "/paramsTest",params = {"username","password!=123456"})
public String index5(){
return "valueTest";
}
1
<a th:href="@{/paramsTest(username='root',password=123456)}">测试params属性</a>

1.5Ant风格路径

  1. ?代表任意字符
  2. *代表任意0个或多个字符
  3. **代表任意一层或多层目录 单独使用
    1
    2
    3
    4
    5
    6
    7
    8
    @RequestMapping("/a?a/AntI")
    public String Ant1(){return "success";}

    @RequestMapping("/a*a/AntII")
    public String Ant2(){return "success";}

    @RequestMapping("/**/AntIII")
    public String Ant3(){return "success";}

1.6占位符

1
2
3
4
5
@RequestMapping("/PhTest/{id}/{name}")
public String PhTest(@PathVariable("id")String id,@PathVariable("name")String name){
System.out.println("id:"+id+" name:"+name);
return "success";
}
1
2
<a th:href="@{/PhTest/10086/Tom}">占位符使用</a>
<!--格式/{具体传入参数}-->

2.获取参数方式

2.1通过原生servlet

  1. 创建html对应映射方法,把原生Servlet写入方法形参
  2. 调用getParameter方法,传入html种的属性
  3. 创建html使用thymeleaf设置属性和对应值
    1
    2
    3
    4
    5
    6
    7
    8
    @RequestMapping(value = "/testServletAPI",params = {"username","password"})
    public String index1(ServletRequest req){
    //通过原生servlet方法获取前端参数
    System.out.println(req.getParameter("username"));
    System.out.println(req.getParameter("password"));
    return "success";
    }
    //html配置
    1
    2
    3
    <a th:href="@{/testServletAPI(username='Tom',password=123456)}">
    使用servlet api获取参数
    </a>

2.2通过控制器方法

  1. 创建html对应映射方法
  2. 方法内写入html属性,使用String类型
  3. 创建html使用thymeleaf设置属性和对应值
    1
    2
    3
    4
    5
    6
    7
    8
    @RequestMapping("/testParams")
    //hobby为多个参数,可以使用字符串或字符串数组获取,若使用数组需使用Array.toString
    public String testParams(String username,String password,String hobby){
    System.out.println(username);
    System.out.println(password);
    System.out.println(hobby);
    return "success";
    }
    1
    2
    <a th:href="@{/testParams(username='菲力',password=123456)}">
    使用控制器方法形参获取参数</a>

2.3@RequestParam获取

  • required代表此参数是否必填,默认为true
  • defaultValue代表默认值,若没传参情况下默认获取指定默认值
    1
    2
    3
    4
    5
    6
    7
    8
    @RequestMapping("/testRps")
    public String testRps(
    @RequestParam(value = "user_name",defaultValue = "默认名称",required = false) String username,
    @RequestParam(value = "secret",defaultValue = "默认密码",required = true) String password){
    System.out.println(username);
    System.out.println(password);
    return "success";
    }
    1
    2
    <a th:href="@{/testRps(user_name='Cherry',secret=123)}">
    @RequestParams测试</a>

2.4实体类获取

1.创建实体类
2.创建html参数名称需要和实体类一直
3.创建映射方法,把实体类作为形参
4.输出实体类对象测试

1
2
3
4
5
6
7
8
@Repository
//实体类
public class User {
private String id;
private String username;
private String password;
//及其set,get,constructor,toString
}
1
2
3
4
5
6
7
//控制器方法
@RequestMapping("/POJO")
public String index2(User user){
//4.测试获取参数
System.out.println(user);
return "success";
}
1
2
3
4
5
<form th:action="@{/POJO}" method="post">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
<input type="submit" value="提交参数"/>
</form>

Spring5 | @RequestMapping
http://example.com/2022/10/21/SpringMVC/RequestMapping/
Author
John Doe
Posted on
October 21, 2022
Licensed under