SpringMvc - @RequestMapping属性详解
@Target({ElementType.METHOD, ElementType.TYPE}) // 可以在方法和类的声明中使用 @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default "";// 指定映射的名称 @AliasFor("path") String[] value() default {}; // 指定请求路径的地址 @AliasFor("value") String[] path() default {}; // 指定请求路径的地址 // 指定请求的方式,是一个RequsetMethod数组,可以配置多个方法 RequestMethod[] method() default {}; // 指定参数的类型 String[] params() default {}; // 指定请求头内容 String[] headers() default {}; // 指定数据请求的格式 String[] consumes() default {}; // 指定返回的内容类型 String[] produces() default {}; }
RequestMapping属性介绍
1、name
此处name属性,相当于方法的注释,使方法更易理解
@RequestMapping(value = "login",name = "用户登录") @ResponseBody public String login() { return "success"; }
2、value
请求映射的名称
@Controller @RequestMapping("user") //此处如果不省略,则为@RequestMapping(value="user") public class UserController { @RequestMapping("login") @ResponseBody public String login() { return "success"; } }
指定请求的实际地址,指定的地址可以是URI 模板模式(Template Pattern);
由于value属性是@RequestMapping注释的默认属性,因此如果只有唯一的属性,则可以省略该属性名,如果有超过一个属性,则必须写上value属性名称。即如下两个标注含义一样
@RequestMapping(value="login")
value属性支持通配符匹配:
@RequestMapping(value="login/*");
即:http://localhost:8080/login/1或者http://localhost:8080/login/hahaha都能够正常访问该接口
此处通过URL:http://localhost:8080/user/login进行访问,将由login()方法进行处理
3、path
path属性,和1中的value属性使用一致,两者都是用来作为映射使用的。
4、method
指定请求类型, 如GET、POST、PUT、DELETE等;
@RequestMapping(value = "login",method = RequestMethod.GET) @ResponseBody public String login() { return "success"; }
以上方法表示,该方法只支持GET请求。
此处也可以为
@RequestMapping(value = "login",method = {RequestMethod.GET,RequestMethod.POST})
说明该方法可以同时支持GET和POST请求。
如果没有method属性,则说明该方法支持全部的HTTP请求。
5、params
该属性指定,请求中必须包含params属性规定的参数时,才能执行该请求
RequestMapping(value = "login",params = "flag") @ResponseBody public String login() { return "success"; }
以上方法,说明请求中必须包含flag参数才能执行该请求,flag参数值不做要求
http://localhost:8080/login?flag=xxx // 正常访问
http://localhost:8080/login // 无法访问
@RequestMapping(value = "login",params = "flag=true") @ResponseBody public String login() { return "success"; }
以上方法,说明请求中必须包含flag参数,而且参数值必须为true才能执行该请求
http://localhost:8080/login?flag=true // 正常访问
http://localhost:8080/login?flag=false // 无法访问
http://localhost:8080/login // 无法访问
6、headers
// 表示只接收本机发来的请求 @RequestMapping(path = "/login", headers="Referer=http://localhost:8080") public String login() { return "success"; }
以上方法 ,必须满足请求的header中包含了指定的"Referer"请求头和值为"http://localhost:8080"时,才能执行该请求
7、consumes
指定处理请求的提交内容类型(Content-Type),例如:application/json、text/html时,才能够让该方法处理请求
@RequestMapping(value = "login",consumes = "application/json") @ResponseBody public String login() { return "success"; }
8、produces
指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型
@RequestMapping(value = "login",produces = "application/json") @ResponseBody public String login() { return "success"; }
此外,produces属性还可以指定返回值的编码
@RequestMapping(value = "login",produces = "application/json,charset=utf-8")
如上,则指明返回utf-8编码