😀前言
本篇主要讲解@RequestMapping 注解以及其它使用方式
🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
🥰 @RequestMapping 注解以及其它使用方式
@RequestMapping 可以修饰方法和类
说明:
@RequestMapping 注解可以修饰方法,还可以修饰类 当同时修饰类和方法时,
请求的 url 就是组合 /类请求值/方法请求值
注意
- method=RequestMethod.POST: 表示请求buy目标方法必须是 post
- RequestMethod 四个常用选项 POST, GET, PUT, DELETE[后面我们会详解]
- SpringMVC 控制器默认支持GET和POST两种方式
- buy()方法请求的url: http://ip:port/工程路径/user/buy
- @PostMapping(value = “/buy”)
等价 @RequestMapping(value = “/buy”,method = RequestMethod.POST)
代码演示
创建Texe,java
@RequestMapping(value = "/user") @Controller //UserHandler就是一个处理器/控制器,注入到容器 public class UserHandler { //@RequestMapping(value = "/buy",method = RequestMethod.POST) @PostMapping(value = "/buy") public String buy() { System.out.println("购买商品~"); return "success"; }
创建request.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>购买商品</title> </head> <body> <h1>购买商品</h1> <%--老师解读 1. action="user/buy" 对应 url http://localhost:8080/工程路径/user/buy --%> <form action="user/buy" method="post"> 购买人:<input type="text" name="username"><br> 够买量:<input type="text" name="nums"><br> <input type="submit" value="购买"> </form>
创建success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>操作成功</title> </head> <body> <h1>恭喜, 操作成功~</h1> </body> </html>
完成测试(页面方式)
页面方式完成测试-- Postman
🤩@RequestMapping 可以指定请求方式
- 说明: @RequestMapping 还可以指定请求的方式(post/get/put/delete…), 请求的方式需
要和指定的一样,否则报错 - SpringMVC 控制器默认支持GET和POST两种方式, 也就是你不指定 method , 可以接收GET 和 POST 请求
注意
- @GetMapping(value = “/find”)
等价 @RequestMapping(value = “/find”,method = RequestMethod.GET)
应用实例
@RequestMapping(value = "/find", method = RequestMethod.GET) public String search(String bookId) { System.out.println("查询书籍 bookId= " + bookId); return "success"; }
- 当明确指定了 method , 则需要按指定方式请求, 否则会报错,比如
😋@RequestMapping 可指定 params 和 headers 支持简单表达式
- param1: 表示请求必须包含名为 param1 的请求参数
- !=param1: 表示请求不能包含名为 param1 的请求参数
- param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
- {“param1=value1”, “param2”}: 请求必须包含名为 param1 和 param2 的两个请求参数,且 param1 参数的值必须为value1
列如
- params=“bookId” 表示请求该目标方法时,必须给一个bookId参数, 值没有限定
- search(String bookId): 表示请求目标方法时, 携带的bookId=100, 就会将请求携带的 bookId对应的值 100, 赋给 String bookId
- params = “bookId=100” 表示必须给一个bookId参数, 而且值必须是100
@RequestMapping(value = "/user") @Controller //UserHandler就是一个处理器/控制器,注入到容器 public class UserHandler { @RequestMapping(value = "/find", params = "bookId=100", method = RequestMethod.GET) public String search(String bookId) { System.out.println("查询书籍 bookId= " + bookId); return "success"; } }
修改 request.jsp , 增加代码
<hr><h1>演示params的使用</h1> <a href="user/find?bookId=100">查询书籍</a>
页面方式完成测试-- Postman
小的细节说明和测试
1) 需要有 bookId 参数,并且值为 100, 否则报错
@RequestMapping(value = “/find”, params = “bookId=100”, method == RequestMethod.GET)
2) 需要有 bookId 参数,并且值不为100否则报错
@RequestMapping(value = “/find”, params = “bookId!=100”, method = RequestMethod.GET
🤔@RequestMapping 支持 Ant 风格资源地址
- ?:匹配文件名中的一个字符
- *:匹配文件名中的任意字符
- **:匹配多层路径
- Ant 风格的 url 地址举例
- /user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL
- /user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL
- /user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL
应用实例
@RequestMapping(value = "/user") @Controller //UserHandler就是一个处理器/控制器,注入到容器 public class UserHandler { @RequestMapping(value = "/message/**") public String im() { System.out.println("发送消息"); return "success"; } }
添加request.jsp代码
<hr><h1>演示Ant风格的请求资源方式 </h1> <a href="user/message/aa">发送消息1</a><br> <a href="user/message/aa/bb/cc">发送消息2</a><br>
Postman 完成测试
🧐@RequestMapping 还可以配合 @PathVariable 映射 URL 绑定的占位符。
这样就不需要在 url 地址上带参数名了,更加的简洁明了
比如: 我们的前端页面是 这样的, kristina 和 300 是参数值
< h 1>占位符的演示
要求:
我们希望目标方法获取到 username 和 userid, value=“/xx/{username}” -
@PathVariable(“username”)…
前端页面代码: 占位符的演示
(value = “/reg/{username}/{userid}”): 表示kristina->{username} 300=>{userid}
@RequestMapping(value = "/user") @Controller //UserHandler就是一个处理器/控制器,注入到容器 public class UserHandler { @RequestMapping(value = "/reg/{username}/{userid}") public String register(@PathVariable("username") String name, @PathVariable("userid") String id) { System.out.println("接收到参数--" + "username= " + name + "--" + "usreid= " + id); return "success"; } }
Postman 完成测试
注意事项和使用细节
映射的 URL, 不能重复
@RequestMapping(value = "/user") @Controller //UserHandler就是一个处理器/控制器,注入到容器 public class UserHandler { @RequestMapping(value = "/hi") public String hi() { System.out.println("hi"); return "success"; } @RequestMapping(value = "/hi") public String hi2() { System.out.println("hi"); return "success"; } }
服务端报错信息:to { [/user/hi]}: There is already ‘userHandler’ bean metho
各种请求的简写形式
说明
@RequestMapping(value = “/buy”,method = RequestMethod.POST) 等 价
@PostMapping(value = “/buy”)
简写方式一览: @GetMapping @PostMapping @PutMapping @DeleteMapping
这个在上面的代码中也提到过 和有具体的列子 这里只是具体说一下
🧡综合代码示例
编写一个表单, 以 Post 提交 Computer 信息, 后端编写 ComputerHandler, 可以接收到信息
jsp代码
<h1>电脑信息</h1> <form action="computer/info" method="post"> 品牌:<input type="text" name="brand"><br> 价格:<input type="text" name="price"><br> 数量:<input type="text" name="nums"><br> <input type="submit" value="提交"> </form>
后端代码
注意info方法的形参名需要和请求的参数名一致
@RequestMapping("/computer") @Controller public class ComputerHandler { //这里一定要注意,info方法的形参名需要和请求的参数名一致 @PostMapping("/info") public String info(String brand, String price, String nums) { System.out.println("电脑信息 brand=" + brand + " price=" + price + " nums=" + nums); return "success"; } }
😄总结
@RequestMapping 还可以指定请求的方式(post/get/put/delete…), 请求的方式需
要和指定的一样,否则报错
- ?:匹配文件名中的一个字符
- *:匹配文件名中的任意字符
- **:匹配多层路径
- Ant 风格的 url 地址举例
- /user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL
- /user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL
- /user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞