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

目录

1. 注解介绍

2. 属性介绍

2.1 value属性【记】

2.2 name属性

2.3 path属性

2.4 method属性【记】

2.5 params 属性

2.6 headers 属性

2.7 consumes 属性

2.8 produces 属性

3. 映射路径

3.1多级路径问题

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值