【SpringMVC】注解@ResquestMapping你真正了解么?

笔记大纲
  • @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"}请求必须包含名为 param1param2 的两个请求参数,且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/  欢迎转载,一起技术交流吧!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值