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

相关推荐
wstcl20 分钟前
让你的asp.net网站在调试模式下也能在局域网通过ip访问
后端·tcp/ip·asp.net
倔强的小石头_2 小时前
【C语言指南】函数指针深度解析
java·c语言·算法
kangkang-6 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥8 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
ai小鬼头8 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
idolyXyz8 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉8 小时前
Maven 依赖调解的两大原则
java·maven
萧曵 丶9 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
netyeaxi9 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~9 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式