RequestMapping
RequestMapping的功能
ReqeustMapping实现的是将请求与处理请求的控制器方法进行关联,建立映射,实现当请求传进来的时候,调用对应方法的情况。
RequestMapping的位置
注意RequestMapping的value值不可重复,即每个请求只能映射一个Controller类的方法。
若@RequestMapping定义在类上,表示映射请求的初始信息
@RequestMapping定义在方法上,表示映射请求的具体信息
例:若类上没有@RequestMapping标识,则前端的链接写法:href=“@{/方法上注解value值}”,若类上有,则:href=“@{/类上注解值/方法上注解值}”
@Controller
@RequestMapping("/test")
public class RequestMappingController {
//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
return "success";
}
}
RequestMapping的value属性
RequestMapping的value属性必须设置,当value值为字符串时,其会匹配对应的地址,当value值为数组时,每一个数组内的地址都会映射到相同的页面
<a th:href="@{/testRequestMapping}">测试value属性值</a><br>
<a th:href="@{/test}">测试value属性值part2</a>
//两个地址都会映射到同一个页面
@RequestMapping(value = {"/testRequestMapping", "/test"})
public String toSuccess() {
return "success";
}
RequestMapping的Method属性
Method属性设置的是请求的请求方式(get或post)来匹配请求映射
get的请求参数会被拼接在地址栏,post通过请求体来进行。
get请求速度更快、安全性更差、可传递请求内容较小,post恰好相反,get无法传文件。
浏览器的请求方式与value值匹配的地址值可以匹配时,浏览器可以转入对应网页,若value值匹配但请求方式不匹配会导致405,value值不匹配会导致404.
若不设置method属性,则不论是get还是post请求方式,都请求得到。
.java中写法:
//注意RequestMethod是一个枚举类,其中定义的是各种请求方式。
@RequestMapping(value = {"/testRequestMapping", "/test"}, method = {RequestMethod.GET})
public String toSuccess() {
return "success";
}
<!-- form表单,使用post请求方式 -->
<form th:action="@{/test}" method="post">
<input type="submit" value="测试method注解" />
</form>
例如这两个代码就不会生成正常页面。
另外:
也可以使用对应的请求方式的注解直接进行请求方式的定义,就不需要拓展method属性了,例如:
//get请求方式的获取方式
@GetMapping(value = "/testGet")
public String testGet() {
return "testGet";
}
同样的注解还有:
@PostMapping、@PutMapping、@DeleteMapping.
但是要注意:put、delete请求form表单是无法发送的。
RequestMapping的params属性
params属性的定义分为以下几种情况:
1.
// 传入的参数中必须携带username参数
params = {"username"}
2.
//传入的参数中不能有username参数
params = {"!username"}
3.
//传入的参数中必须有username参数且username参数的值为admin
params = {"username=admin"}
4.
//传入的参数中必须有username且username的参数不能为admin
params = {"username!=admin"}
其中前端的标签:
<!-- thymeleaf传入多个参数的方式 -->
<!-- 或者直接在后面加?也行 -->
<a th:href="@{/testParams(username='admin', password=123456)}">这个测试Params参数</a>
RequestMapping的Header属性
与params类似,params限制的是传入的参数,Header限制的是请求头中的信息,请求头中都是设置信息,可以做很多很有用的限制。
//注意这里{}内的内容不能带空格
@RequestMapping(value = "/testParams", params = {"username"}, headers = {"Host=localhost:8080"})
RequestMapping的ant风格编程(模糊查询)
?代表任意的单个字符
@RequestMapping(value = "/a?a/testAnt")
例如下面就是可以被匹配的(注意 “?与 /” 是不能被模糊匹配的,因为其本身就是特殊符号):
<a th:href="@{/ana/testAnt}" >测试ant模糊匹配</a>
“*” 代表0个或多个字符,(?和 / 是不能匹配的)
"**"代表多个字符,同时可以使用 / 但要注意,如果使用**
就只能在两个斜线之间只写**
如下:
@RequestMapping (value = "/**/testAnt")
这样的写法可以匹配多层目录,例如如下这样就可以被匹配:
http://localhost:8080/springMVC/an//a/v//b/s/d//s//a/testAnt
SpringMVC占位符(restful风格)
原始方式:/deleteUser?id=1
restful方式:/deleteUser/1
前端中的编写方式:
<a th:href="@{/testPath/1}">测试使用占位符</a>
后端中的编写方式:文章来源:https://www.toymoban.com/news/detail-442609.html
//在value属性中接收前端传进来的id的值
//在通过形参前的注解@PathVariable来修饰形参以将@RequestMapping中获取到的参数传进来
@RequestMapping (value = "/testPath/{id}")
public String testPath (@PathVariable("id")Integer id) {
System.out.println("id = " + id);
return "success";
}
注意这种写法,请求地址中必须传参,如果不传参会找不到资源文章来源地址https://www.toymoban.com/news/detail-442609.html
到了这里,关于【SpringMVC】二、RequestMapping注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!