@RequstMapping注解

662 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

@RequstMapping注解

@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系

注解位置

@RequestMapping标识一个类,设置映射请求的请求路径的初始信息

@RequestMapping标识一个方法:设置映射请求请求路径的具体信息

@Controller
@RequestMapping("/test")
public class RequestMappingTest {
    //此时请求hello方法路径为: /test/hello
    @RequestMapping("/hello")
    public String hello(){
        return "success";
    }
}

value属性

value属性是数组类型,即当前浏览器请求value属性中的任何一个值都会处理注解所标识的方法

@Controller
public class RequestMappingTest {
    @RequestMapping({"/hello","/aaa"})
    public String hello(){
        return "success";
    }
}

访问/aaa时,同样会执行hello()

method属性

method属性是数组类型,即当前服务器请求method属性中的任何一个方式,都会被处理,报错信息为:405

测试

将/hello,/aaa路径设为post方式,此时就无法通过get方式访问了

@Controller
public class RequestMappingTest {
    @RequestMapping(
            value = {"/hello","/aaa"},
            method = {RequestMethod.POST}
    )
    public String hello(){
        return "success";
    }
}

写个post方式的form表单,通过post请求成功访问

<form th:action="@{/hello}" method="post">
    <input type="submit" value="method属性">
</form>

由于是数组类型,所以也可以设置多个值,此时get、post就都可以访问了

@RequestMapping(
        value = {"/hello","/aaa"},
        method = {RequestMethod.POST,RequestMethod.GET}
)

派生注解

除method属性外,还可以用@GetMapping、@PostMapping等注解实现同样功能

params

params属性是数组类型,通过请求的请求参数进行匹配,即浏览器发送的请求参数必须满足params属性的设置,报错信息为:400

params的四种表达式

"param":表示当前所匹配的请求必须携带param参数

"!param":表示当前所匹配请求的请求参数一定不能携带param参数

"param=value":表示当前所匹配请求的请求参数必须鞋带param参数且值必须为value

"param!=value":表示当前匹配请求的请求参数可以不携带param参数,若携带一定不能是value

如下为四种表达式分别表示:请求必须携带username,不能携带password,必须携带age且值为20,可以不鞋带gender若携带之不能为女

params = {"username","!password","age=20","gender!=女"}

headers

headers属性通过请求的请求头信息匹配请求映射,报错信息为:404

也有四种表达式且跟params中的一样

如下表示必须携带referer,否则404

headers = {"referer"}

ant风格

@RequestMapping注解的value属性中可以设置一些特殊的字符:

?:任意的单个字符(不包括 ? 和 /)

*:任意个数的任意字符(不包括 ? 和 /)

**:任意层数的任意目录,但使用该字符时前后不能有任何其他字符

?和*就不看了 ,看下**

@RequestMapping({"/**/test"})
public String ant(){
    return "success";
}

使用该种方式,只要以任意形式访问/test目录都可跳转到success.html

路径占位符(rest)

传统:/deleteuser?id=1

rest: /user/delete/1

需要在@RequestNapping注解的value属性中所设置的路径中,使用{xxx}的方式表示路径中的数据

在通过@Pathvariable注解,将占位符所标识的值和控制器方法的形参进行绑定

@RequestMapping("/rest/{id}")
public String rest(@PathVariable("id") int id){
    System.out.println(id);
    return "success";
}