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

相关推荐
ღ᭄ꦿ࿐Never say never꧂几秒前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
所待.3832 分钟前
小小扑克牌算法
java·算法
.生产的驴9 分钟前
SpringBoot 消息队列RabbitMQ 消息确认机制确保消息发送成功和失败 生产者确认
java·javascript·spring boot·后端·rabbitmq·负载均衡·java-rabbitmq
.生产的驴10 分钟前
SpringBoot 消息队列RabbitMQ在代码中声明 交换机 与 队列使用注解创建
java·spring boot·分布式·servlet·kafka·rabbitmq·java-rabbitmq
海里真的有鱼17 分钟前
Spring Boot 中整合 Kafka
后端
idealzouhu23 分钟前
Java 并发编程 —— AQS 抽象队列同步器
java·开发语言
布瑞泽的童话23 分钟前
无需切换平台?TuneFree如何搜罗所有你爱的音乐
前端·vue.js·后端·开源
听封27 分钟前
Thymeleaf 的创建
java·spring boot·spring·maven
写bug写bug33 分钟前
6 种服务限流的实现方式
java·后端·微服务