从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

    • SpringMVC 基本概念
    • SpringMVC 入门案例
    • SpringMVC 中的组件介绍
    • RequestMapping 注解的作用
      • RequestMapping 注解的作用
      • 新建控制器
      • 新建 index2.jsp
      • 新建 success2.jsp
      • 测试
      • RequestMapping 注解的属性
      • 测试 value 属性
      • 测试 method 属性
      • 测试 params 属性
      • 测试 headers 属性
      • 小结
      • 源码
    • 请求参数的绑定
    • 自定义类型转换器
    • 使用原生的 Servlet-API
    • SpringMVC 常用注解
    • 响应数据和结果视图
    • 文件上传
    • 文件上传之跨服务器
    • SpringMVC 的异常处理
    • SpringMVC 的拦截器
    • SSM 整合
  • SpringBoot

  • Java
  • SpringMVC
2023-05-15
目录

RequestMapping 注解的作用

# 30.RequestMapping 注解的作用

入门案例中我们简单使用了下@RequestMapping,本文继续讲解其作用和属性

# RequestMapping 注解的作用

@RequestMapping 用于建立请求 URL 和处理请求方法之间的对应关系。

出现位置可以是类上,也可以是方法上。

如果出现在类上:是配置请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如,我们有账户模块和订单模块,每个模块有不同的路径:

账户模块:

  • /account/add
  • /account/update
  • /account/delete

...

订单模块:

  • /order/add
  • /order/update
  • /order/delete

可以看到每个模块的路径,其前面都是相同的,例如/account,/order/,我们可以在类上配置这个属性,然后在方法上就只需配置二级访问目录了

# 新建控制器

我们新建一个类:

package com.peterjxl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(path = "/user")
public class HelloController2 {

    @RequestMapping(path = "/hello")
    public String sayHello() {
        System.out.println("Hello, RequestMapping!");
        return "success2";
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

‍ 我们在类上加了 @RequestMapping 注解,并配置了 /user 路径;

此时我们访问/user/hello 路径,就会执行 HelloController2 的 sayHello 方法。 ‍

# 新建 index2.jsp

我们在 webapp 目录下,新建一个 index2.jsp,文件内容:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h3>入门程序</h3>
        <a href="user/hello">入门程序</a>
    </body>
</html>
1
2
3
4
5
6
7
8
9
10

‍

# 新建 success2.jsp

我们在 WEB-INF/pages/ 目录下新建一个 success2.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
      <h1>Requesting</h1>
    </body>
</html>

1
2
3
4
5
6
7
8
9
10

‍

# 测试

我们重启 Tomcat,访问 localhost: 8080/index2.jsp,并点击超链接,可以看到能正常跳转。

# RequestMapping 注解的属性

RequestMapping 注解还有一些属性:

  • value:用于指定请求的 URL。它和 path 属性的作用是一样的。

  • method:用于指定请求的方式,例如 HTTP 的 get 方式,post 方式等。可以传多个值。

  • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。例如:

    params = {"accountName"},表示请求参数必须有 accountName
    params = {"accountName = peterjxl"},表示请求参数必须有 accountName,且值必须是peterjxl
    params = {"moeny!100"},表示请求参数中 money 不能是 100。
    
    1
    2
    3
  • headers:用于指定限制请求消息头的条件。

# 测试 value 属性

我们首先将 path 的配置去掉:

@RequestMapping(/hello")
public String sayHello() {
    System.out.println("Hello, RequestMapping!");
    return "success2";
}
1
2
3
4
5

重启服务器,可以看到能正常运行的。

# 测试 method 属性

@Controller
@RequestMapping(path = "/user")
public class HelloController2 {

    @RequestMapping(value = "/hello", method =RequestMethod.POST)
    public String sayHello() {
        System.out.println("Hello, RequestMapping!");
        return "success2";
    }
}
1
2
3
4
5
6
7
8
9
10

由于我们有多个属性,因此注解里的 value 不能省略了。 ‍ 我们重启服务器,并点击超链接,可以看到会报错:

‍

我们可以配置多个 method:

@RequestMapping(value = "/hello", method = {RequestMethod.GET, RequestMethod.POST})
public String sayHello() {
    System.out.println("Hello, RequestMapping!");
    return "success2";
}
1
2
3
4
5

# 测试 params 属性

params:用于指定限制请求参数的条件,它支持简单的表达式,要求请求参数的 key 和 value 必须和配置的一模一样。

例如:

params = {"accountName"},表示请求参数必须有 accountName
params = {"accountName = peterjxl"},表示请求参数必须有 accountName,且值必须是peterjxl
params = {"moeny!100"},表示请求参数中 money 不能是 100。
1
2
3

我们可以测试下,配置注解:

    @RequestMapping(
            value = "/hello",
            method = {RequestMethod.GET, RequestMethod.POST},
            params = {"username"}
    )
    public String sayHello() {
        System.out.println("Hello, RequestMapping!");
        return "success2";
    }
1
2
3
4
5
6
7
8
9

‍ 此时我们 JSP 里没有传任何参数,访问是会报错的:

我们可以在 index2.jsp 中配置这个参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h3>入门程序</h3>
        <a href="user/hello?username=peterjxl">入门程序</a>
    </body>
</html>
1
2
3
4
5
6
7
8
9
10

‍ 重新部署,再次访问,可以看到正常了。 ‍

# 测试 headers 属性

用于指定限制请求消息头的条件,例如必须包含某个请求头:

 @RequestMapping(
            value = "/hello",
            method = {RequestMethod.GET, RequestMethod.POST},
            params = {"username"},
            headers = {"Accept"}
    )
    public String sayHello() {
        System.out.println("Hello, RequestMapping!");
        return "success2";
    }
1
2
3
4
5
6
7
8
9
10

例如我们配置了,必须包含 Accept 请求头,否则是不合法的请求。当然一般都会带上该请求头,所以我们目前是能正常访问的 ‍

# 小结

一般 params 属性和 headers 属性用的少,value 和 method 属性用的比较多

注意:以上四个属性只要出现 2 个或以上时,他们的关系是与的关系。也就是必须都符合每个属性的限制,才算合法的请求

# 源码

本项目已将源码上传到 GitHub (opens new window) 和 Gitee (opens new window) 上。并且创建了分支 demo2,读者可以通过切换分支来查看本文的示例代码。 ‍

上次更新: 2025/6/3 09:31:54
SpringMVC 中的组件介绍
请求参数的绑定

← SpringMVC 中的组件介绍 请求参数的绑定→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式