在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置
源码:
// 该注解说明可以在类和方法上使用
// 用于类上:表示类中的所有响应请求的方法都是以该地址作为父路径
// 用于方法上: 提供进一步的细分映射信息
@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 {};
}
注解中的属性除了 name() 返回的字符串,其它的方法均返回数组,也就是可以定义多个属性值,例如 value() 和 path() 都可以同时定义多个字符串值来接收多个URL请求
属性
value
指定请求的实际地址,指定的地址可以是URI Template 模式
@RequestMapping 中的 value 和 path 属性(这两个属性作用相同,可以互换,如果仅有这一个属性,则可以省略)
普通的具体值
@RequestMapping("/test1")
public String test1(){
return "test";
}
@RequestMapping(value = "/test2")
public String test2(){
return "test";
}
// 多个请求映射到一个方法上
@RequestMapping(value = {"/test3","/","/test4"})
public String test3(){
return "test";
}
含有某变量的一类值(URI Template Patterns with Path Variables)
// 请求路径:工程名/test1/path
@RequestMapping("/test1/{path}")
public String test1(@PathVariable String path){
return "test";
}
含正则表达式的一类值( URI Template Patterns with Regular Expressions)
@RequestMapping(value = "/list/{path:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
public BaseDTO list(@PathVariable String path) {
// TODO
}
method
method 主要用来定义接收浏览器发来的何种请求。在Spring中,使用枚举类
org.springframework.web.bind.annotation.RequestMethod来定义浏览器请求的方式。
HTTP规范定义了多种请求资源的方式,最基本的有四种,分别为:GET(查)、POST(增)、PUT(改)、DELETE(删),而URL则用于定位网络上的资源相当于地址的作用,配合四种请求方式,可以实现对URL对应的资源的增删改查操作。
在实际应用中,很多人并没有按照这个规范做,因为使用GET/POST同样可以完成PUT和DELETE操作,甚至GET也可以完成POST操作,因为GET不需要用到表单,而POST却需要通过表单来发送。
// 处理GET请求
@RequestMapping(value = "/test2", method = RequestMethod.GET)
public String test2(){
return "test";
}
// 处理POST请求
@RequestMapping(value = "/test2", method = RequestMethod.POST)
public String test3(){
return "test";
}
由于在 RequestMapping 注解类中 method() 方法返回的是 RequestMethod 数组,所以可以给 method 同时指定多个请求方式,
@RequestMapping(value = "/test2", method = {RequestMethod.GET, RequestMethod.POST})
public String test3(){
return "test";
}
consumes
指定处理请求的 提交内容类型 (Content-Type),例如 application/json, text/html
// 方法仅处理请求方式是GET和request Content-Type为“application/json”类型的请求
@RequestMapping(value = "/test2", method = RequestMethod.GET, consumes = "application/json")
public String test2(){
return "test";
}
produces
指定 返回的内容类型 ,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
@RequestMapping(value = "/list" , method = RequestMethod.POST,produces="application/json")
public JSONObject list(@PathVariable String communityId) {
JSONObject object = new JSONObject();
object.put("communityId",communityId);
return object;
}
//@responseBody就是返回值是json数据,使用@responseBody,就可以省略produces属性
@RequestMapping(value = "/list" , method = RequestMethod.POST)
@ResponseBody
public JSONObject list(@PathVariable String communityId) {
JSONObject object = new JSONObject();
object.put("communityId",communityId);
return object;
}
//返回值是json数据,字符编码为utf-8
@RequestMapping(value = "/list" , method = RequestMethod.POST,produces="application/json;charset=utf-8")
public JSONObject list(@PathVariable String communityId) {
JSONObject object = new JSONObject();
object.put("communityId",communityId);
return object;
}
params
该属性表示请求参数,也就是追加在URL上的键值对,多个请求参数以&隔开,指定request中必须包含某些参数值时,才让该方法处理。
// 设定必须包含username参数,且username=chen
@RequestMapping(value = "/test", params = "username=chen")
public String test1(){
return "test1 chen";
}
// 设定必须包含username参数,且username=yang
@RequestMapping(value = "/test", params = "username=yang")
public String test2(){
return "test1 yang";
}
// // 设定必须包含username参数,且username=zhao
@RequestMapping(value = "/test", params = "username=zhao")
public String test3(){
return "test1 zhao";
}
//设定必须包含username 和age两个参数,且age参数不为10 (可以有多个参数)
@RequestMapping(value = "/list" ,params = { "username","age!=10" })
public String list() {
return "test";
}
headers
指定request中必须包含某些指定的header值,才能让该方法处理请求。
用于HTTP协义交互的信息被称为HTTP报文,客户端发送的HTTP报文被称为请求报文,服务器发回给客户端的HTTP报文称为响应报文,报文由报文头部和报文体组成。
请求头部(Request Headers):请求头包含许多有关客户端环境和请求正文的信息,例如浏览器支持的语言、请求的服务器地址、客户端的操作系统等。
响应头部(Rsponse Headers):响应头也包含许多有用的信息,包括服务器类型、日期、响应内容的类型及编码,响应内容的长度等等。
//仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.baidu.com/”的请求;
@RequestMapping(value = "/list" , headers="Referer=http://www.baidu.com/")
public String list() {
return "test";
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95916.html