【SpringMVC】二、RequestMapping注解

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>

后端中的编写方式:

    //在value属性中接收前端传进来的id的值
    //在通过形参前的注解@PathVariable来修饰形参以将@RequestMapping中获取到的参数传进来
    @RequestMapping (value = "/testPath/{id}")
    public String testPath (@PathVariable("id")Integer id) {
        System.out.println("id = " + id);
        return "success";
    }

注意这种写法,请求地址中必须传参,如果不传参会找不到资源

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值