SpringMVC学习笔记——3.@RequestMapping注解

1.@RequestMapping注解的功能

从注解名称上我们可以看到,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联
起来,建立映射关系。

SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

2.@RequestMapping注解的位置

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息
@RequestMapping标识一个方法:设置映射请求请求路径的具体信息
如果类上和类中方法都含有注解,则需要先访问初始信息才能访问到具体信息 。
在这里插入图片描述
在这里插入图片描述

当有多个控制器时,@RequestMapping所处理的请求地址是一样的、请求路径是一样的,则SpringMVC就不知道该找那个控制器中的方法进行处理。因此,要保证所有控制器里面,@RequestMapping所能匹配到的请求地址是唯一的。通过在类上添加@RequestMapping注解设置请求路径的初始信息解决。

3.@RequestMapping注解的Value属性

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射

@RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求

@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
</body>
<a th:href="@{/hello/testRequestMapping}">测试RequestMapping注解的位置</a><br>
<a th:href="@{/testRequestMapping}">测试RequestMapping注解的value属性-->/testRequestMapping</a><br>
<a th:href="@{/test}">测试RequestMapping注解的value属性-->/test</a><br>
</html>
@Controller
//@RequestMapping("/hello")
public class RequestMappingController {

    @RequestMapping(value = {"/testRequestMapping","/test"})
    public String success(){
        return "success";
    }
}

4.@RequestMapping注解的method属性,method如果没有设置则默认为get

@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射

@RequestMapping注解的method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配
多种请求方式的请求

若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错
405:Request method ‘POST’ not supported
请求方式不支持,出现这个错误就是当前请求方式不是请求映射所支持的请求方式


get和post的区别:

  • get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
  • Get是不安全的,因为在传输过程,数据被放在请求的URL中。get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用”?”连接,而各个变量之间使用”&”连接post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL
  • get传输的数据要受到URL长度限制(最大长度是 2048 个字符);而post可以传输大量的数据,上传文件通常要使用post方式;
  • 使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
  • Get执行效率却比Post方法好。Get是form提交的默认方法。

请求方式不支持(405错误)示例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:
1、对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解,派生注解中仍然要添加value值,匹配请求映射。如:@GetMapping(“/testGetMapping”)等价于@RequestMapping(value = {“/testGetMapping”},method = {RequestMethod.GET})
处理get请求的映射–>@GetMapping
处理post请求的映射–>@PostMapping
处理put请求的映射–>@PutMapping
处理delete请求的映射–>@DeleteMapping
2、常用的请求方式有get,post,put,delete
但是目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符
串(put或delete),则按照默认的请求方式get处理
若要发送put和delete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter,在
RESTful部分会讲到

5.@RequestMapping注解的params属性(了解),params设置的请求参数条件必须同时满足才能匹配请求映射

@RequestMapping注解的params属性通过请求的请求参数匹配请求映射

@RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数
和请求映射的匹配关系:

  • “param”:要求请求映射所匹配的请求必须携带param请求参数
  • “!param”:要求请求映射所匹配的请求必须不能携带param请求参数
  • “param=value”:要求请求映射所匹配的请求必须携带param请求参数且param=value
  • “param!=value”:要求请求映射所匹配的请求必须携带param请求参数但是param!=value
<a th:href="@{/testParamsHeaders(username='admin',password=123456)}">测试RequestMapping注解的parmas属性-->/testParamsHeaders</a>
@RequestMapping(value = "/testParamsHeaders",
            params = {"username"})
    public String testParamsHeaders(){
        return "success";
    }

HTTP Status 400 - Parameter conditions “username” not met for actual request parameters:
请求参数不匹配,params设置的请求参数条件不匹配时就会出现400错误

6.@RequestMapping注解的headers属性(了解)

@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射

@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信
息和请求映射的匹配关系

  • “header”:要求请求映射所匹配的请求必须携带header请求头信息
  • “!header”:要求请求映射所匹配的请求必须不能携带header请求头信息
  • “header=value”:要求请求映射所匹配的请求必须携带header请求头信息且header=value
  • “header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且header!=value

若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面显示404错误,即资源未找到 。

    @RequestMapping(value = "/testParamsHeaders",
            params = {"username","password!=123456"},
            headers = {"Host=localhost:8081"})
    public String testParamsHeaders(){
        return "success";
    }

以上述代码为例,由于Tomcat配置的地址为localhost:8080,因此headers属性不匹配,会报404错误。
在这里插入图片描述

7.@RequestMapping注解导致出现的几种错误

  • 405错误,请求方式不支持
    这是由于@RequestMapping注解中配置的请求方式(method)与请求映射(html文件中的配置)所支持的请求方式不匹配所导致出现的错误。
  • 400错误,请求参数不匹配
    这是由于@RequestMapping配置的请求参数(params)与请求映射(html文件中的参数配置)中的参数不匹配所导致的错误。
  • 404错误,若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面显示404错误,即资源未找到 。

8.SpringMVC支持ant风格的路径(ant风格:模糊匹配)

  • ?:表示任意的单个字符
  • *:表示任意的0个或多个字符
  • ** :表示任意的一层或多层目录
    注意 :在使用 ** 时,只能使用/**/xxx的方式
<a th:href="@{/ana/testAnt}">测试@RequestMapping可以匹配ant风格的路径-->使用?</a><br>
    @RequestMapping("/a?a/testAnt")
    public String testAnt(){
        return "success";
    }

如代码所示,@RequestMapping(“/a?a/testAnt”)可以与请求映射(th:href=“@{/ana/testAnt}”>)进行匹配。

9.SpringMVC支持路径中的占位符(重点)

原始传参方式:/deleteUser?id=1,通过?传参将id参数进行传输。

rest方式传参:/deleteUser/1,通过占位符的方式将请求路径中某些数据听过路径的方式传输到服务器中。
在这里插入图片描述
在这里插入图片描述
此时id=1,name=lyy;

SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的 @RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过 @PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值