@RequestMapping注解的介绍和使用
文章目录
1、@RequestMapping介绍
- 用于方法上:表示用来匹配要处理的请求
- 用于类上:表示为当前类的所有方法的请求地址添加一个前置路径,访问的时候必须要添加此路径
-
为什么需要用于类上?
因为方法一个项目中,多个方法用到同一个RequestMapping值时,就会报错。此时就需要使用在类上,一确保找到相应的类上的方法。一般很少用。
2、@RequestMapping的属性值
1、value属性值(如果不写默认就是value)
-
要匹配的请求
@RequestMapping(value = "/helalo") public String hello() { System.out.println("成功!"); return "hello"; }
2、path属性值
- 和value属性值一样,要匹配的请求
3、method属性值
-
限制发送请求的方式: POST GET,不配置时,POST和GET请求都可以访问。
//只接受GET请求 @RequestMapping(value = "/hello",method = RequestMethod.GET) public String hello() { System.out.println("成功!"); return "hello"; } //只接受POST请求 @RequestMapping(value = "/hello",method = RequestMethod.POST) public String hello() { System.out.println("成功!"); return "hello"; } //当不添加method属性值时,GET和POST都能请求 @RequestMapping(value = "/hello") public String hello() { System.out.println("成功!"); return "hello"; }
在jsp中编写GET和POST请求
注意:需要在jsp中嵌套java,获取请求路径。(如果没有导入jspAPI将会找不到request)
<!--获取请求地址--> <% pageContext.setAttribute("ctp",request.getContextPath()); %>
<%@ page import="org.springframework.asm.Attribute" %><%-- To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <!--获取请求地址--> <% pageContext.setAttribute("ctp",request.getContextPath()); %> <!--POST请求--> <form action="${ctp}/hello" method="post"> <input type="text"><br> <input type="submit"> </form> <!--GET请求--> <body> <a href="${ctp}/hello">GET请求</a> $END$ </body> </html>
4、patams
-
表示请求要接受的参数,如果定义了这个属性,那么发送的时候必须要添加参数
-
匹配规则:
-
直接写参数的名称:
@RequestMapping(value = "/hello",params = {"name"}) //表示带有name属性的请求才能访问
@RequestMapping(value = "/hello",params = {"name"}) public String hello(String name) { System.out.println(name); System.out.println("成功!"); return "hello"; }
访问:http://localhost:8080/mashibing_springmvc_01_war_exploded/hello?name=sss
-
请求不能包含的参数:
@RequestMapping(value = "/hello",params = {"!name"}) //表示带有name参数的请求会被拒绝访问。
访问:http://localhost:8080/mashibing_springmvc_01_war_exploded/hello?name=sss会被拒绝访问,但是参数name换成其他参数就可以。
-
表示请求中需要要包含的参数但是可以限制值 :
@RequestMapping(value = "/hello",params = {"name=jiang","age"}) //表示带有name参数值为jiang且带有age属性的请求才能访问
@RequestMapping(value = "/hello",params = {"name=jiang","age"}) public String hello(String name) { System.out.println(name); System.out.println("成功!"); return "hello"; }
访问:http://localhost:8080/mashibing_springmvc_01_war_exploded/hello?name=jiang&age=12
-
5、 headers
- 填写请求头信息
@RequestMapping(value = "/hello",headers={"User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0"})
//只有特性的请求头才能访问,由于请求限制
6、 produces
- 限制请求中Context-Type
7、consumers
- 限制响应中的Context-Type
3、@RequestMapping模糊匹配
- ?:可以代替任意字符
- *:能代替任意多的字符和一层路径
- **:能代替多层路径
示例
@RequestMapping(value = "/controller/hello"
@RequestMapping(value = "/**/h*llo?")