笔记大纲
-
@RequestMapping之映射请求注解
- @RequestMapping注解简述
- @RequestMapping源码参考
-
@RequestMapping之映射请求方式
-
@RequestMapping之Ant路径风格
-
@RequestMapping之映射带占位符的URL
- 常规传参
- REST传参(@PathVariable)
1.@RequestMapping之映射请求注解
1.1.@RequestMapping注解简述
SpringMVC框架使用@RequestMapping
注解目的会为了控制器指定可以处理哪些URL请求;
在控制器的类定义及方法定义处都可以标注@RequestMapping
:
控制器中标注位置 | 说明 |
---|---|
在类上 | 提供初步的请求映射信息,相对于web应用的根目录 |
在方法上 | 提供进一步的细分映射信息,相对于标记在类上的URL |
如果在类上为标注@RequestMapping
,则方法处标记的URL相对于web应用的根目录;
基本作用:当DispatcherServlet
截获请求后,就通过控制器上的@RequestMapping
提供的映射信息确定请求所对应的处理方法。
(1)处理器类:
@Controller
@RequestMapping("/codinglin")
public class HelloWorldController {
//"/"表示相对的项目 http://localhost:8080/SpringmvcDemo01/codinglin/hello
@RequestMapping("/hello")
public String hello() {
return "success";
}
}
(2)请求测试类:
<a href="${pageContext.request.contextPath}/codinglin/hello">SpringMVC测试</a><br>
1.2.@RequestMapping源码参考
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String[] value() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
* @author Juergen Hoeller
* @since 2.5
* @see RequestMapping
* @see org.springframework.web.servlet.DispatcherServlet#setDispatchOptionsRequest
* @see org.springframework.web.servlet.DispatcherServlet#setDispatchTraceRequest
//处理请求的方式
//POST(增) DELETE(删) PUT(改) GET(查)
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
2.@RequestMapping之映射请求方式
@RequestMapping
除了可以使用URL映射请求外,还可以使用请求方法、请求参数及请求头映射请求。
映射条件 | 说明 |
---|---|
value | 表示请求的URL |
method | 表示请求方法[POST(增) DELETE(删) PUT(改) GET(查)] |
params | 表示请求参数 |
heads | 表示请求头 |
注意:params 和 headers支持简单的表达式!
表达式 | 说明 |
---|---|
param1 | 请求必须包含名为 param1 的请求参数 |
!param1 | 表示请求不能包含名为param1 的请求参数 |
param1 != value1 | 请求包含名为 param1 的请求参数,但其值不能为 value1 |
{"param1=value1", "param2"} | 请求必须包含名为 param1 和param2 的两个请求参数,且param1 参数的值必须为 value1 |
Controller控制器代码:
@Controller
public class HelloWorldController {
@RequestMapping(value = "/testRequestMethod",method=RequestMethod.POST)
public String testRequestMethod() {
System.out.println("========testRequestMethod===========");
return "success";
}
}
测试入口页面代码:
<!-- 表单的默认请求属性是GET -->
<a href="${pageContext.request.contextPath}/testRequestMethod">测试@RequestMapping默认请求GET</a><br>
报错:
修改表单请求为POST:
页面成功跳转到success.jsp视图!
<!-- 修改表单请求属性为POST -->
<form action="${pageContext.request.contextPath}/testRequestMethod" method="post">
<input type="submit" value="测试@RequestMapping默认请求POST">
</form>
3.@RequestMapping之Ant路径风格
@RequestMapping 支持 Ant 风格的 URL,但是一般在实际开发不会使用!
Ant 风格资源地址支持 3 种匹配符:
匹配符 | 说明 |
---|---|
? | 匹配文件名中的一个字符 |
* | 匹配文件名中的任意字符 |
** | 匹配多层路径 |
Controller控制器代码:
@Controller
//?:匹配文件名中的一个字符
//*:匹配文件名中的任意字符
//**:匹配多层路径
public class HelloWorldController {
//lindaxia/A/2019/c/s/d/n/testAntPathStyle
@RequestMapping(value="/lindaxia/?/*/**/testAntPathStyle")
public String testAntPathStyle() {
return "success";
}
}
测试入口页面代码:
<a href="${pageContext.request.contextPath}/lindaxia/A/2019/c/s/d/n/testAntPathStyle">testAntPathStyle测试</a>
页面效果:
4.@RequestMapping之映射带占位符的URL
带占位符的URL 是 Spring3.0 新增功能,该功能在 SpringMVC 是 Restful风格成功应用,通过 @PathVariable
可将 URL 中占位符参数绑定到控制器处理方法的形参中:URL 中的 {xxx} 占位符可通过 @PathVariable(“xxx”) 绑定到操作方法的形参中!
4.1.常规传参
Controller控制器代码:
@RequestMapping("/testPathVariable")
public String testPathVariable(String blogName,/Integer year) {
System.out.println("blogName:"+blogName+"===url:"+year);
return "success";
}
测试入口页面代码:
<!-- 常规传参 -->
<a href="${pageContext.request.contextPath}/testPathVariable?blogName=林大侠&year=2019">testPathVariable常规传参测试1</a><br>
页面效果:
4.2.REST传参
Controller控制器代码:
// {blogName}、{year}作为占位符!!!
/* =========/testPathVariable/codinglin/2019
* =========/testPathVariable/{blogName}/{year}
* @PathVariable注解:将Restful风格请求中的参数,映射给方法的形参
*/
@RequestMapping("/testPathVariable/{blogName}/{year}")
public String testPathVariable(@PathVariable("blogName")String blogName,@PathVariable("year")Integer year) {
System.out.println("blogName:"+blogName+"===url:"+year);
return "success";
}
测试入口页面代码:
<!-- REST风格传参-->
<a href="${pageContext.request.contextPath}/testPathVariable/codinglin/2019">testPathVariable传参测试2</a>
页面效果:
两者在控制台打印结果一致:
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!