【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?) > 一个 号( ) > 形式

相关推荐
魂梦翩跹如雨20 小时前
P8615 [蓝桥杯 2014 国 C] 拼接平方数——Java解答
java·c语言·蓝桥杯
申阳20 小时前
Day 19:02. 基于 SpringBoot4 开发后台管理系统-项目初始化
前端·后端·程序员
学习路上_write20 小时前
FREERTOS_任务通知——使用
java·前端·javascript
Undoom20 小时前
openEuler iSula 容器引擎关键性能指标量化评测
后端
rabbit_pro20 小时前
Java 文件上传到服务器本地存储
java·服务器·python
q_191328469520 小时前
基于Springboot2+Vue2的旅游景点购票系统
java·vue.js·spring boot·后端·mysql·毕业设计·计算机毕业设计
哈哈哈笑什么20 小时前
基于RabbitMQ的企业级订单系统设计与实现
后端
LSTM9720 小时前
使用 Java 实现条形码生成与识别
后端
哈哈哈笑什么20 小时前
如何防止恶意伪造前端唯一请求id
前端·后端
哈哈哈笑什么20 小时前
Spring Cloud 微服务架构下幂等性的 业务场景、解决的核心问题、完整实现方案及可运行代码
后端