SpringMVC的注解@RequestMapping属性及使用
作者:把苹果咬哭的测试笔记 发布时间:2022-12-31 02:03:00
SpringMVC注解@RequestMapping
在之前的 hello world 示例中,用到了 @RequestMapping 注解,它的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
当 SpringMVC 接受到指定的请求,就会到这个映射关系中找到对应控制器方法来处理这个请求。
一、@RequestMapping 注解的位置
在示例中,注解是用在了方法上,除此之外,还可以用在类上。
1. 作用在方法
@Controller
public class RequestMappingController {
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
return "success";
}
}
此时请求映射所映射的请求的请求路径为:/testRequestMapping。
2. 作用在类
@Controller
@RequestMapping("/test")
public class RequestMappingController {
//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
return "success";
}
}
此时请求映射所映射的请求的请求路径为:/test/testRequestMapping。
作用在类上以后会经常用到,比如有2个模块:用户和订单,那么每个模块下都会有自己的列表接口 /list。
为了更好的通过名称区分出不同模块,可以给两个类上加上注解,使其最终路径为/user/list、/order/list。
当然,你也可以不用类的注解,直接在方法的注解上做区分,比如/userList和/orderList。
总之,一个请求只能有一个控制器来处理,如果你两个不同的控制器方法,都使用/list,那么请求过来的时候就不知道该找哪个处理,会报错。
二、@RequestMapping 注解的 value 属性
value 属性通过请求的请求地址匹配请求映射,是必须设置的,否则请求地址匹配不到映射。
另外,value 属性也是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址的请求。
@Controller
public class RequestMappingController {
@RequestMapping(
value = {"/test1", "/test2"}
)
public String testRequestMapping(){
return "success";
}
}
这里不管请求地址是/test1还是/test2,都可以找到控制器 testRequestMapping(),返回 success.html 。
三、@RequestMapping 注解的 method 属性
method属性通过请求的请求方式,比如 get 或 post ,来匹配请求映射。
method 属性是一个 RequestMethod 类型的数组,表示该请求映射能够匹配多种请求方式的请求。
若当前请求的请求地址满足请求映射的 value 属性,但是请求方式不满足 method 属性,比如控制器是设置是 GET 请求方法,但是请求发送是 post:
@Controller
public class RequestMappingController {
@RequestMapping(
value = {"/test1"},
method = {RequestMethod.GET}
)
public String testRequestMapping(){
return "success";
}
}
index.html 添加 post 发送:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>Hello World</h1>
<a th:href="@{/target}" rel="external nofollow" >访问目标页面 target.html </a>
<br>
<a th:href="@{/test1}" rel="external nofollow" >测试@RequestMapping的value属性-->/test1</a><br>
<a th:href="@{/test2}" rel="external nofollow" >测试@RequestMapping的value属性-->/test2</a><br>
<a th:href="@{/test}" rel="external nofollow" >测试@RequestMapping的method属性-->/test</a><br>
<form th:action="@{/test1}" method="post">
<input type="submit">
</form>
</body>
</html>
点击 submit 按钮,浏览器报错405:Request method 'POST' not supported。
如果继续添加 post 方法支持,则可以正常访问:
@Controller
public class RequestMappingController {
@RequestMapping(
value = {"/test1"},
method = {RequestMethod.GET, RequestMethod.POST}
)
public String testRequestMapping(){
return "success";
}
}
@RequestMapping 结合请求方式的派生注解
对于处理指定请求方式的控制器方法,SpringMVC 中提供了 @RequestMapping 的派生注解。
@GetMapping:处理 get 请求的映射
@PostMapping:处理 post 请求的映射
@PutMapping:处理 put 请求的映射
@DeleteMapping:处理 delete 请求的映射
使用这种注解,就不需要设置 method 属性了。
@GetMapping("/test3")
public String testGetMapping() {
return "success";
}
四、@RequestMapping 注解的 params 属性
最常用的还是上面说的 value 和 method 属性,其他的仅做了解。
params 属性通过请求的请求参数匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系:
param:要求请求映射所匹配的请求必须携带 param 请求参数
!param:要求请求映射所匹配的请求必须不能携带 param 请求参数
param=value:要求请求映射所匹配的请求必须携带 param 请求参数且 param=value
param!=value:要求请求映射所匹配的请求必须携带 param 请求参数但是 param!=value
举个例子:
@RequestMapping(
value = {"/test1"},
method = {RequestMethod.GET, RequestMethod.POST},
params = {"username", "password!=123456"}
)
public String testRequestMapping(){
return "success";
}
这里params = {"username", "password!=123456"}的意思就是,请求中必须带有参数username和password,且password参数的值必须不等于123456。
五、@RequestMapping 注解的 headers 属性
同样作个了解。
headers 属性通过请求的请求头信息匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:
header:要求请求映射所匹配的请求必须携带header请求头信息
!header:要求请求映射所匹配的请求必须不能携带header请求头信息
header=value:要求请求映射所匹配的请求必须携带header请求头信息且header=value
header!=value:要求请求映射所匹配的请求必须携带header请求头信息且header!=value
若当前请求满足 @RequestMapping 注解的 value 和 method 属性,但是不满足 header 属性,此时页面显示404错误,即资源未找到。
@RequestMapping(
value = {"/test1"},
method = {RequestMethod.GET, RequestMethod.POST},
params = {"username", "password!=123456"},
headers = {"Host=localhost:8081"} // 这里端口变成8081
)
public String testRequestMapping(){
return "success";
}
我本地端口是 8080,现在去请求页面,会报错。
感谢《尚硅谷》的学习资源。
来源:https://blog.csdn.net/wessonlan/article/details/124812958


猜你喜欢
- 本文实例为大家分享了Android原生视频播放VideoView的具体代码,供大家参考,具体内容如下布局文件activity_video.x
- 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下://定义roberts算子函数private sta
- Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一
- 本篇介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实
- 最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,G
- 本文为大家分享了Unity3D飞机大战游戏第一部分的实现代码,供大家参考,具体内容如下让飞机可以发射 * 准备工作:1、将 * 设置成预制体2、
- 本文实例为大家分享了SpringMVC实现上传下载文件的具体代码,供大家参考,具体内容如下一、SpringMVC专门提供了CommonsMu
- 一、什么是JSONJSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言。相比于XML,它
- 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号
- 前言:现在一般的Android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。当有更新时,会弹
- 关于怎么一次退出所有Activity网上有很多很多种说法,比如用杀进程的方式:android.os.Process.killProcess(
- 一、什么是桥接模式:桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥。在现
- 本文实例为大家分享了C#实现截图工具小项目的具体代码,供大家参考,具体内容如下1.起因一直用的截图是qq的截图,所以想要实现一个简单点的截图
- 本文介绍了SpringBoot结合SpringSecurity实现图形验证码功能,分享给大家,具体如下:生成图形验证码根据随机数生成图片将随
- 一.解析概念StringUtils概念StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提
- Spring Boot 项目之热部署配置前言所谓热部署,简单来说,就是代码修改后不需重启项目就可自动加载出新的内容。注意:热部署在 debu
- 1、添加一个App.config配置文件。2、配置服务http://Lenovo-PC:80/EvisaWS/WharfService?ws
- 如下图所示,你的UI元素可能小于48dp,图标仅有32dp,按钮仅有40dp,但是他们的实际可操作焦点区域最好都应达到48dp的大小。为使小
- 启动类的存放位置今天,写了一个项目,但是启动类为什么一直报错我是放在这个位置的,但是就一直报放在默认包错误 想记录下微服务启动类的
- DataGridView 列有三种排序模式。每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGr