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编码

posted on 2021-12-09 17:09  每天积极向上  阅读(161)  评论(0编辑  收藏  举报

导航