持续创作,加速成长!这是我参与「掘金日新计划 · 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";
}