@RequestMapping
我们只要编写一个Controller接口,就轻松的实现了请求响应,其中@RequestMapping注解起到了至关重要的作用。
@RestController
@RequestMapping("/mvc")
public class MvcController {
@RequestMapping("/test")
public Object test() throws IOException {
return "test";
}
}
@RequestMapping翻译过来就是请求映射,它可以将请求和处理请求的控制器方法关联起来,建立映射关系。接收到指定的请求时,就会来找到在映射关系中对应的控制器方法来处理这个请求。
@RequestMapping注解源码:
@Target({
ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {
};
@AliasFor("value")
String[] path() default {
};
RequestMethod[] method() default {
};
String[] params() default {
};
String[] headers() default {
};
String[] consumes() default {
};
String[] produces() default {
};
}
注解位置
@RequestMapping可以作用于类和方法上,作用类时表示请求路径的初始信息,作用方法时表示请求路径的具体信息。
比如文档开头代码中,完整的请求路径为类上配置的路径加上方法上的路径,即 “/mvc/test”。
value和path属性
可以看到value和path配置项互为别名,并且可以配置多个。
@AliasFor("path")
String[] value() default {
};
@AliasFor("value")
String[] path() default {
};
可以配置多个value,下面代码表示可以通过/test、/aaa、/bbb来访问。
@RequestMapping(value = {
"/test","/aaa","/bbb"})
public Object test() {
return "test";
}
method属性
可以通过method属性配置请求方式。
配置项为RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式。未配置时,表示支持所有的请求方式,在实际开发中,应该配置具体的请求方式,mvc也提供了对应的Restful风格解决方案,后续会介绍。
RequestMethod[] method() default {
};
RequestMethod 是一个枚举,定义了所有的Http请求方式。
public enum RequestMethod {
GET,
HEAD,
POST,
PUT,
PATCH,
DELETE,
OPTIONS,
TRACE;
private RequestMethod() {
}
}
下面的代码表示当前请求支持GET、Post请求。
@RequestMapping(value = {
"/test","/aaa","/bbb"},method = {
RequestMethod.GET, RequestMethod.POST})
当请求方式错误时,会抛出HttpRequestMethodNotSupportedException异常:
params属性
params属性,是一个字符串数组,用于对请求参数进行限制。
String[] params() default {
};
使用方式主要有以下几种
1、 直接写参数,表示必须携带当前参数访问;
@RequestMapping(value = "/test001",params = {
"name"})
public Object test001(String name,Integer id) {
return "test";
}
}
1、 参数先加个“!”,表示不能携带这个参数访问;
@RequestMapping(value = "/test001",params = {
"!name"})
1、 使用“=”表达式,表示这个参数必须为等号右边的值,才能访问;
@RequestMapping(value = "/test001",params = {
"name=lisi"})
1、 使用“!=”表达式,表示这个参数不能为等号右边的值,才能访问;
@RequestMapping(value = "/test001",params = {
"name!=lisi"})
当不符合params配置的表达式时,会抛出UnsatisfiedServletRequestParameterException异常。
headers属性
headers属性也是一个字符串数组,和params使用方法一致,是对请求头进行匹配限制。
String[] headers() default {
};
常用的表达式和params一样,这里只演示一种。
以下代码表示,请求头中不能携带Host属性。
@RequestMapping(value = "/test001",headers = {
"!Host"})
当请求头不满足配置规则时,这里抛出是的404异常
produces和consumes属性
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。
以下代码表示提交的Content-Type和返回值类型都必须为application/json。
@RequestMapping(value = "/test002",produces="application/json",consumes="application/json")
public Object test002() {
return "test";
}
Ant风格支持
什么是Ant风格
Ant风格,是请求路径的一种匹配方式。
通配符 | 描述 |
---|---|
? | 表示任意的单个字符 |
* | 表示任意的0个或多个字符 |
** | 表示任意的一层或多层目录 |
以下代码表示,匹配“/mvc”加任意一个字符串的访问路径。
- /mvc : 404异常
- /mvc/a : 正常访问
- /mvc/aa: 404异常
@RequestMapping("/mvc/?")
以下代码表示,匹配“/mvc/”加任意字符串的访问路径。
- /mvc : 404异常
- /mvc/a/sss/ : 404异常
- /mvc/a : 正常访问
- /mvc/aa: 正常访问
@RequestMapping("/mvc/*/")
以下代码表示,匹配“/mvc/”加任意一层或多层的访问路径,没有添加层也是可以的。
- /mvc : 正常访问
- /mvc/a : 正常访问
- /mvc/a/sss/: 正常访问
@RequestMapping("/mvc/**/")
占位符URL支持
可以在@RequestMapping注解配置的访问路径中,通过{}占位符,映射某个参数的值,然后通过@PathVariable(“参数名称”) 传递给方法。常用于RESTful风格中。
以下代码中,直接访问“/test003/adsad/111”,可以将URL中的参数传递给test003方法。
@RequestMapping(value = "/test003/{name}/{id}")
public Object test003(@PathVariable String name,@PathVariable Integer id) {
return "test003";
}
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: