关于SpringMVC中@RequestMapping注解参数的说明

概述

根据官方API中关于注解@RequestMapping的说明,@RequestMapping一共有8个参数:

参数类型 参数字段名
String[] consumes
String[] headers
RequestMethod[] method
String name
String[] params
String[] produces
String[] value
String[] path

这几个参数的作用分别是什么以及他们之间有什么关系呢?

参数name, value, path

这三个参数以前一直没搞懂,不知道具体有啥区别。这三者都与请求路径有关,而且都支持在类和方法上设置。
name参数对映射命名,是该注解的默认值(如果只设置该值,则不需要指定参数名,否则,比如指定参数名)。

我找了半天资料都没发现这三者有什么明显的区别,但是通过测试i,发现了一些问题。首先,这三个只能同时使用任意一种,name最多可以指定一个值,但是value和path可以指定多个。而且在使用value时,可以不用加路径的开始的那个 ‘/’,但是使用path时必须加。另外,可以配合@PathVariable一起使用,可以使用1个或者是多个,另外还可以加入正则表达式,参考链接。

参数method

最容易理解的就是method这个参数,表示该mapping接受哪些请求方法,请注意,该参数是一个数组类型的,即说明可以指定多种。支持的类型有:
GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE
在类级别(api中用的type level,而不是class level来表示)和方法级别上都支持。当在类级别的mapping中指定了method, 那么该类所属的所有方法的mapping都将继承该method, 因为SpringMVC首先处理类级别的mapping的限制条件。如果不设置,默认为空,即所有请求方法都能被接受。

参数params

使用该参数可以对映射进行筛选,比如当uri一致时,请求方法也一致时,就可以使用该参数来进一步的区分。
该参数有多种使用方式:

  • “myParam=myValue”: 这种风格既指定了参数名也制定了参数值,当且仅当请求参数中包含该参数以及参数值为指定值时,才映射。
  • “myParam != myValue”:这种风格和第一种类似,只不过这里是不相等而已。
  • “myParam”: 这种风格只给出了参数名,表示请求参数中必须包含该参数才映射, 参数值可以是任意值。
  • “!myParam”: 这种风格和第三种类似,只不过这里要求不出现而已。

类级别和方法级别的mapping都支持该参数,当使用在类上时,该类所属方法都继承该参数限制。该筛选限制是强制性的。

参数header

该参数和params参数很类似,唯一区别在于params是针对请求参数,header是针对http请求而言的。

  • 使用格式和上面的header参数的格式一样,同样是四种不同的格式。

参数consumes

该参数是针对请求的Content-Type而言的,可以对其值进行筛选,从而指定特定的Content-Type才进行映射。
比如 consumes = {“text/plain”, “application/*”} 表示Content-Type值为 “text/plain”或者是“application/*”的请求才进行映射。
类或方法上的mapping都可以设置,但是当同时设置时,方法上面的设置会覆盖掉类上面的设置。

参数produces

该参数和consumes类似,只不过consumes是针对 请求的Content-Type而言的,produces是针对Accept而言的。

你可能感兴趣的:(Java)