SpringMVC:@RequestMapping注解

1. @RequestMapping作用

@RequestMapping` 注解是 Spring MVC 框架中的一个控制器映射注解,用于将请求映射到相应的处理方法上。具体来说,它可以将指定 URL 的请求绑定到一个特定的方法或类上,从而实现对请求的处理和响应。

2. 出现位置的区别

出现在类上

java 复制代码
//@RequestMapping注解:放类上时所有方法都在该路径上
//当访问资源含有/user时会访问该类,匹配相对应要执行的函数
//如:访问下面/detail资源时实际访问路径为/user/detail
@RequestMapping(value = "/user")
public class UserController {

出现在方法上

java 复制代码
//注解在方法上时当访问资源路径中有/user/detail时会执行下面的方法
    @RequestMapping(value = "/detail")
    public String detail() {
        //返回的字符串即要访问的资源(返回逻辑视图)
        return "userdetail";
    }

3. @RequestMapping注解的value属性

value属性用于设置请求资源路径

value值的使用

复制代码
/***
 * 细节一:
 * 一个资源可以对应多个路径(即同一个终点(资源)可以通过不同的方法去访问)
 * 但一个路径不能同时对应多个终点(资源)
 */

返回的逻辑视图为要展示的资源,后端通过该逻辑视图找到对应资源进行展示

java 复制代码
 //一个资源被多个路径对应
    //当数组只有一个数据时大括号可以省略即上面的写法
    //当value值只要一个value也可也省略
    //value也可以被path替换,底层中path是value的别名
    @RequestMapping(value = {"/detail2", "detail3"})
    public String detail2() {
        return "userdetail";
    }

Ant风格的value值

复制代码
/***
 * 细节二:Ant风格的value值
 * ant风格的value值模糊匹配
 *       ?,代表任意一个字符(除 / 或者 ? 之外的任意字符) 一定是字符,空着也不行
 *              如:@RequestMapping(value = "/ant/a?t")
 *       *,代表0到N个任意字符 (除了 / 或者 ? 之外的任意n个字符)
 *       **,代表0到N个任意字符,并且路径中可以出现路径分隔符 /
 *
 * 注意:** 通配符在使用时,左右不能出现字符,只能是 /
 * spring6之后用**进行模糊匹配时必须是结尾,否则只有一个*的效果
 */
java 复制代码
@RequestMapping(value = {"/ant/a?t", "/ant/a*t", "/ant/**"})
    public void testAnt() {

    }

占位符

复制代码
/***
 * 细节三:占位符
 *普通的请求路径:http://localhost:8080/springmvc/login?username=admin&password=123&age=20
 * RESTful风格的请求路径:http://localhost:8080/springmvc/login/admin/123/20
 */
java 复制代码
//此时id和password充当占位符,可接收id和password的值
    @RequestMapping("/testURL/{id}/{password}")
    public String testURL(
            //用注解@PathVariable可将占位符的值赋给下面的变量
            @PathVariable("id")
            String id,
            @PathVariable("password")
            String password) {
        System.out.println("id:" + id + " password:" + password);
        return "ok";
    }

4. @RequestMapping注解的method属性

method属性用于设置前端请求方式

java 复制代码
//设置method属性则限制前端的请求方式
    //即前端必须以post方式请求才能访问该资源,否则会报405错误
    @RequestMapping(value = "/method", method = RequestMethod.POST)
    public String tetMethod() {
        return "ok";
    }

衍生注解

复制代码
/***
 * 衍生注解
 *  @PostMapping 等同于 @RequestMapping(value =" ", method = RequestMethod.POST)
 *  @GetMapping  等同于 @RequestMapping(value =" ", method = RequestMethod.GET)
 *  @PatchMapping
 */

常用提交方式

复制代码
/***
 * 常用提交方式:
 * post get put delete head
 * post:适合新增
 * get:适合查询
 * delete:适合删除
 * head:适合返回一些头部信息,不包含响应体
 * form表单提交只有get和post两种方式
 * 若要其他方式需用axios
 */

5. @RequestMapping设置请求参数

params属性的理解

params属性用来设置通过请求参数来映射请求。对于RequestMapping注解来说:

* value属性是一个数组,只要满足数组中的任意一个路径,就能映射成功

* method属性也是一个数组,只要满足数组中任意一个请求方式,就能映射成功。

* **params属性也是一个数组,不过要求请求参数必须和params数组中要求的所有参数完全一致后,才能映射成功。

四种用法

java 复制代码
 //设置params参数后请求路径必须携带params设置的参数,不然会报400错误即请求参数不一致
    @RequestMapping(value = "/params", params = {"username", "password"})

    //此时携带的参数中username的值必须为zhangsan,否则也是请求参数不一致
    @RequestMapping(value = "/params", params = {"username=zhangsan", "password"})

    //即携带参数不能含有username  写法:params = {"!username"}
    @RequestMapping(value = "/params", params = {"!username"})
    
    //携带参数中username的值不能为zhangsan
    @RequestMapping(value = "/params", params = {"username!='zhangsan", "password"})
    public String testParams() {
        return "ok";
    }

测试用例

html 复制代码
<a th:href="@{/user/params(username='zhangsan', password=1234)}">参数页面</a>

6. @RequestMapping设置请求头

headers和params原理相同,用法也相同。当前端提交的请求头信息和后端要求的请求头信息一致时,才能映射成功。

四种用法

@RequestMapping(value="/login", headers={"Referer", "Host"}) 表示:请求头信息中必须包含Referer和Host,才能与当前标注的方法进行映射。

@RequestMapping(value="/login", headers={"Referer", "!Host"}) 表示:请求头信息中必须包含Referer,但不包含Host,才能与当前标注的方法进行映射。

@RequestMapping(value="/login", headers={"Referer=http://localhost:8080/springmvc/", "Host"}) 表示:请求头信息中必须包含Referer和Host,并且Referer的值必须是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。

@RequestMapping(value="/login", headers={"Referer!=http://localhost:8080/springmvc/", "Host"}) 表示:请求头信息中必须包含Referer和Host,并且Referer的值不是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。

相关推荐
李少兄1 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
此木|西贝1 小时前
【设计模式】原型模式
java·设计模式·原型模式
可乐加.糖1 小时前
一篇关于Netty相关的梳理总结
java·后端·网络协议·netty·信息与通信
s9123601011 小时前
rust 同时处理多个异步任务
java·数据库·rust
9号达人1 小时前
java9新特性详解与实践
java·后端·面试
cg50171 小时前
Spring Boot 的配置文件
java·linux·spring boot
啊喜拔牙2 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
anlogic2 小时前
Java基础 4.3
java·开发语言
非ban必选3 小时前
spring-ai-alibaba第七章阿里dashscope集成RedisChatMemory实现对话记忆
java·后端·spring
A旧城以西3 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea