RequestMapping属性
-
控制器中有多个方法对应一个请求的情况
@Controller public class HelloController { @RequestMapping("/") public String index(){ return "index"; } @RequestMapping("/") public String getTarget(){ return "target"; } }
此时服务器会报500的错误,说明以上这种情况是不可行的
-
RequestMapping注解标识的位置
此注解可以标识在类上,也可以表示在方法上,实际开发过程中,很容易出现多个方法对应同一个请求名的情况,这个方法可以解决
@Controller @RequestMapping("/hello") public class HelloController { @RequestMapping("/") public String index(){ return "index"; } //此时访问target时,需要将路径设置为/hello/target @RequestMapping("/target") public String getTarget(){ return "target"; } }
-
RequestMapping设置value属性
可以看到value属性是一个字符串数组,这也就意味着可以设置多个value属性
通过以下测试,我们发现两个跳转按钮都可以转发到success页面,这就说明value属性可以设置多个,但只要满足一个即可,相当于一个房间有了多扇门
@Controller public class RequestMappingController { @RequestMapping(value = {"/value","/test"}) public String valueTest(){ return "success"; } }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>首页</h1> <a th:href="@{/test}">跳转--->test</a> <br> <a th:href="@{/value}">跳转--->value</a> </body> </html>
-
RequestMapping设置method属性
method属性是一个RequestMethod数组,也是可以设置多个值,通过请求的请求方式(get或post)匹配请求映射,如果不设置的话默认是不将method作为条件过滤
@Controller public class RequestMappingController { @RequestMapping( value = {"/value","/test"}, //设置method属性为get method = {RequestMethod.GET} ) public String valueTest(){ return "success"; } }
<body> <h1>首页</h1> <a th:href="@{/test}">跳转--->test</a> <br> <a th:href="@{/value}">跳转--->value</a> <br> <!--get方法--> <a th:href="@{/test}">跳转--->test.get</a> <br> <!--post方法--> <form th:action="@{test}" method="post"> <input type="submit" value="提交"> </form> </body>
通过以上测试发现get请求可以正常跳转,而表单提交设置为post会报405错误:Request method ‘POST’ not supported
我们可以看出method属性还可以设置其他的值,比如delete,put等,常用的请求方式有get,post,put,delete
但是在表单中method属性只能设置为post或者get,如果设置为其他值,系统会默认他是get请求
我们还可以使用RequestMapping的派生注解来代替method=?
- @GetMapping:相当于method=get
- @PostMapping:相当于method=post
- @PutMapping:相当于method=put
- @DeleteMapping:相当于method=delete
-
RequestMapping设置params属性
params属性值有以下四种写法
- params:请求参数带有params
- !params:请求参数不带有params
- params=value:请求参数params值为value
- params=!value:请求参数params值不为value
@Controller public class RequestMappingController { @RequestMapping( value = {"/value","/test"}, params = {"!username"} ) public String valueTest(){ return "success"; } }
<!--thymeleaf中以下写法相当于 test?username=admin&password=123--> <a th:href="@{/test(username=admin,password=123)}">跳转--->test.params</a> <br>
我们设置params属性值不带有username,发起请求时服务器会报400错误:Parameter conditions “!username” not met for actual request parameters: username={admin}, password={123}
这里需要注意的是如果设置了多个属性,必须同时满足才可以通过
-
RequestMapping设置header属性
这个一般不是很常用,和params用法类似,我们都知道一次请求,会有请求头、请求体、空行一起发送给服务器,这个head属性设置的是请求头数据
@Controller public class RequestMappingController { @RequestMapping( value = {"/value","/test"}, //设置请求头参数为localhost:8081,我们知道tomcat端口为8080 headers = {"Host=localhost:8081"} ) public String valueTest(){ return "success"; } }
当条件不符合时,会报404错误