【SpringMVC】SpringMVC中@RequestMapping 注解的相关用法。

目录

[1. 注解介绍](#1. 注解介绍)

[2. 属性介绍](#2. 属性介绍)

[2.1 value属性【记】](#2.1 value属性【记】)

[2.2 name属性](#2.2 name属性)

[2.3 path属性](#2.3 path属性)

[2.4 method属性【记】](#2.4 method属性【记】)

[2.5 params 属性](#2.5 params 属性)

[2.6 headers 属性](#2.6 headers 属性)

[2.7 consumes 属性](#2.7 consumes 属性)

[2.8 produces 属性](#2.8 produces 属性)

[3. 映射路径](#3. 映射路径)

3.1多级路径问题

[3.2 Ant 风格的映射路径](#3.2 Ant 风格的映射路径)


1. 注解介绍

@RequestMapping 注解可以写在控制器类上,也可以写在控制单元方法上。

  • 如果写在类上,表示当前类所有控制单元的映射路径,都以指定路径开头。
  • 如果写在方法上,表示当前方法的映射路径。最终访问这个控制单元的映射路径为 : 类上 @RequestMapping 映射路径 + 方法上@RequestMapping 映射路径。

2. 属性介绍

2.1 value属性【记】

定义映射路径。URL 中出现指定映射路径时会执行当前控制单元。支持一个方法多个 映射路径。value 属性可以省略不写,且 Java 的注解中,如果属性是数组类型,且取值只有一 个时,{}可以省略不写。四种写法如下:

注意:如果@RequestMapping 只需要设置 value 属性的话可以省略。但是需要设置 多个属性时 value 不能省略。

2.2 name属性

给控制单元定义一个名称。可以理解 name 是控制单元的注释。

2.3 path属性

path 属性和 value 属性使用方式是相同的,都是设置控制单元的映射路径。

2.4 method属性【记】

  • method 属性类型是 RequestMethod[],RequestMethod 是枚举类型,支持 HTTP 协议中绝 大多数请求类型。其类结构如下。
  • 当设置了 method 属性后,表示只有指定类型请求方式才能访问这个控制单元方法,其他的请求方式访问时,响应会出现 405 状态码。

简写的方式,如下:

  • @PostMapping("/first")
  • @GetMapping("/first")
  • @DeleteMapping("/first")
  • @PutMapping("/first")
  • @PatchMapping("/first")

加上这些注解后,可以省略,后面的method属性。

2.5 params 属性

  • params 属性类型是 String[],表示请求中必须包含指定名称的请求参数。
  • 如果请求中没有包含指定类型参数,响应会出现 400 状态码。并且明确提示在实际的请求参数 中没有明确设置 name 属性。

2.6 headers 属性

headers 属性类型是 String[], 表示请求头中必须包含指定的请求头参数。如果请求头中没有指定的请求头参数,浏览器会报 404

2.7 consumes 属性

consumers 表示处理请求内容(Content-Type)的类型,平时多不设置,由 Spring MVC 自动 判断。

2.8 produces 属性

produces 类型是 String[],作用是设置@ResponseBody 注解的响应内容类型。且仅当请求头 中 Accept 中包含的值才生效。比较抽象,看示例

注意:produces 只有在使用@ResonseBody 注解中才生效。

3. 映射路径

  • 映射路径在之前 Java EE 阶段中学习过,就是 web.xml 中 的值或者 @WebServlet("")注解的值。
  • 映射路径无论是在 Servlet 中还是在 Spring MVC 中,都表示:当 URL 中出现指定路径时会执 行 Servlet 的方法或执行 Spring MVC 的控制单元。

3.1多级路径问题

看下面一个例子:下面这个单元方法,在浏览器输入 http://localhost:8080/demoPath就能访问到my.jsp页面,该请求转发的路径为相对路径,直接是从webapp目录下找my.jsp页面。

再看下面一个单元方法,有两级访问路径,此时如果在输入http://localhost:8080/demoPath/test就会报404错误,这是因为他会在webapp/demoPath这个目录下找my.jsp页面没有找到,因为是相对路径,test和my.jsp是同级的,会生成一个虚拟路径demoPath,会从虚拟路径demoPath目录下找。

解决方法:只需要在返回值中使用绝对路径就可以减少出错的情况。 跳转时 / 表示项目根目录,也就是 webapp 目录的根目录。这样无论你访问路径上有多少层,都会从直接从webapp目录下找。

正确的方式如下,访问成功。

3.2 Ant 风格的映射路径

所谓的 Ant 风格就是支持三种特殊的符号。

  • ? : 表示任意的一个字符
  • * :表示0到多个的任意字符
  • ** :表示任意层级的路径

以第一个用法为例,如下图所示,wollo后面只要跟一个字符访问的页面都是my.jsp页面。

注意: 使用 Ant 的特殊符号时,表示模糊匹配。可能出现客户端发送过来的 URL 能匹配上多个 映射路径,这时的优先级为: 固定值 (wollo1) > ? 形式(wollo?) > 一个 号( ) > 形式

相关推荐
fs哆哆19 分钟前
在VB.net中一维数组,与VBA有什么区别
java·开发语言·数据结构·算法·.net
蝎子莱莱爱打怪20 分钟前
Hadoop3.3.5、Hbase2.6.1 集群搭建&Phoenix使用记录
大数据·后端·hbase
johnZhangqi24 分钟前
深圳大学-计算机信息管理课程实验 C++ 自考模拟题
java·开发语言·c++
David爱编程36 分钟前
并发编程三大特性全解析:原子性、可见性、有序性,一文讲透!
java·后端
Sally璐璐38 分钟前
Go语言变量声明与初始化详解
java·开发语言·golang
你的人类朋友1 小时前
git常见操作整理(持续更新)
前端·git·后端
你的人类朋友2 小时前
git中的Fast-Forward是什么?
前端·git·后端
C4程序员2 小时前
北京JAVA基础面试30天打卡14
java·开发语言·面试
黑客影儿2 小时前
Go特有的安全漏洞及渗透测试利用方法(通俗易懂)
开发语言·后端·安全·web安全·网络安全·golang·系统安全
LGL6030A3 小时前
Java学习历程14——制作一款五子棋游戏(4)
java