SpringMVC注解汇总(二)-请求映射规则
接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息
URL路径映射
1)普通URL路径映射
@RequestMapping(value={"/test1", "/user/create"}):
多个URL路径可以映射到同一个处理器的功能处理方法。
2)URI模板模式映射
@RequestMapping(value="/users/{userId}"):
{×××}占位符, 请求的URL可以是 “/users/123456”
或
“/users/abcd”,通过@PathVariable可以提取URI模板模式中的{×××}中的×××变量。
@RequestMapping(value="/users/{userId}/create"):
这样也是可以的,请求的URL可以是“/users/123/create”。
@RequestMapping(value="/users/{userId}/topics/{topicId}"):
这样也是可以的,请求的URL可以是“/users/123/topics/123”。
3)Ant风格的URL路径映射
@RequestMapping(value="/users/**"):
可以匹配“/users/abc/abc”,但“/users/123”将会被【URI模板模式映射中的“/users/{userId}”模式优先映射到】
@RequestMapping(value="/product?"):
可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;
@RequestMapping(value="/product*"):
可匹配“/productabc”或“/product”,但不匹配“/productabc/abc”;
@RequestMapping(value="/product/*"):
可匹配“/product/abc”,但不匹配“/productabc”;
@RequestMapping(value="/products/**/{productId}"):
可匹配“/products/abc/abc/123”或“/products/123”,也就是Ant风格和URI模板变量风格可混用;
4)正则表达式风格的URL路径映射
从Spring3.0开始支持正则表达式风格的URL路径映射,格式为{变量名:正则表达式},通过@PathVariable提取模式中的{×××:正则表达式匹配的值}中的×××变量了。
@RequestMapping(value="/products/{categoryCode:\\d+}-{pageNumber:\\d+}"):
可以匹配“/products/123-1”,但不能匹配“/products/abc-1”,这样可以设计更加严格的规则。
正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:
URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;
正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。
5)组合使用是“或”的关系
如 @RequestMapping(value={"/test1", "/user/create"}) 组合使用是或的关系,即“/test1”或“/user/create”请求URL路径都可以映射到@RequestMapping指定的功能处理方法。
Spring Web MVC不仅仅提供URL路径映射,还提供了其他强大的映射规则。接下来我们看一下请求方法
映射限定吧。
请求方法映射限定
熟悉的表单一般分为两步:第一步展示,第二步提交,如SimpleFormController那样,那如何通过@RequestMapping来实现呢?
1)请求方法映射限定
我们熟知的,展示表单一般为GET请求方法;提交表单一般为POST请求方法。但URL路径映射方式对任意请求方法是全盘接受的,因此我们需要某种方式来告诉相应的功能处理方法只处理如GET请求方法的请求或POST请求方法的请求。
使用@RequestMapping来实现SimpleFormController的功能。
实例:
@Controller
@RequestMapping("/customers/**") //①处理器的通用映射前缀
public class RequestMethodController {
//②类级别的@RequestMapping窄化
@RequestMapping(value="/create",method=RequestMethod.GET)
public String showForm() {
System.out.println("===============GET");
return "customer/create";
}
//③ 类级别的@RequestMapping窄化
@RequestMapping(value="/create",method=RequestMethod.POST)
public String submit(){
System.out.println("==============POST");
return "redirect:/success";
}
}
说明:
①处理器的通用映射前缀(父路径):表示该处理器只处理匹配“/customers/**”的请求;
②对类级别的@RequestMapping进行窄化,表示showForm可处理匹配“/customers/**/create”且请求方法为“GET”的请求;
③对类级别的@RequestMapping进行窄化,表示submit可处理匹配“/customers/**/create”且请求方法为“POST”的请求。
请求如下
因为返回的customer/create 没有配置create.jsp页面,在服务器会打印日志!
2)组合使用是“或”的关系
@RequestMapping(value="/methodOr", method = {RequestMethod.POST, RequestMethod.GET}):
即请求方法可以是 GET 或 POST。
提示:
1、一般浏览器只支持GET、POST请求方法,如想浏览器支持PUT、DELETE等请求方法只能模拟,稍候章节介绍。
2、除了GET、POST,还有HEAD、OPTIONS、PUT、DELETE、TRACE。
3、DispatcherServlet默认开启对 GET、POST、PUT、DELETE、HEAD的支持;
4、如果需要支持OPTIONS、TRACE,请添加DispatcherServlet在web.xml的初始化参数:dispatchOptionsRequest 和 dispatchTraceRequest 为true。
请求方法的详细使用请参考RESTful架构风格一章。
3)请求参数数据映射限定
实例:
@Controller
@RequestMapping("/parameter1")//①处理器的通用映射前缀
public class RequestParametController {
//②进行类级别的@RequestMapping窄化
@RequestMapping(params="create",method=RequestMethod.GET)
public String showForm() {
System.out.println("=============showform");
return "parameter/create";
}
//③进行类级别的@RequestMapping窄化
@RequestMapping(params="create",method=RequestMethod.POST)
public String submit() {
System.out.println("==========submit");
return "redirect:/success";
}
}
说明:
②@RequestMapping(params="create", method=RequestMethod.GET) :表示请求中有“create”的参数名且请求方法为“GET”即可匹配,如可匹配的请求URL“http://×××/parameter1?create”;
③@RequestMapping(params="create", method=RequestMethod.POST):表示请求中有“create”的参数名且请求方法为“POST”即可匹配;
请求数据中没有指定参数名
//请求参数不包含 create参数名
@RequestMapping(params="!create", method=RequestMethod.GET)
//进行类级别的@RequestMapping窄化
说明
@RequestMapping(params="!create", method=RequestMethod.GET):表示请求中没有“create”参数名且请求方法为“GET”即可匹配,如可匹配的请求URL“http://×××/parameter1?abc”。
请求数据中指定参数名=值
SpringMVC注解汇总(二)-请求映射规则的更多相关文章
- SpringMVC注解汇总(一)-定义
本文根据开涛哥学习SpringMVC汇总而成,方便更好查阅! 网址:http://jinnianshilongnian.iteye.com/blog/1752171 注解式控制器简介 @Control ...
- 9.SpringMVC注解式开发-处理器的请求映射规则的定义
1.对请求URI的命名空间的定义 @RequestMapping的value属性用于定义所匹配请求的URI.但对于注解在方法上和注解在类上, 其value 属性 所指定的URI,意义是不同的 一个@C ...
- Spring MVC 使用介绍(六)—— 注解式控制器(二):请求映射与参数绑定
一.概述 注解式控制器支持: 请求的映射和限定 参数的自动绑定 参数的注解绑定 二.请求的映射和限定 http请求信息包含六部分信息: ①请求方法: ②URL: ③协议及版本: ④请求头信息(包括Co ...
- 跟我学SpringMVC目录汇总贴、PDF下载、源码下载
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- SpringMVC 注解式开发
SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...
- springmvc 注解总结
1.@RequestMapping@RequestMappingRequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上.用于类上,表示类中的所 ...
- 关于SpringMVC注解
1.@RequestMapping RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址 ...
- 【spring springmvc】springmvc使用注解声明控制器与请求映射
目录 概述 壹:注解说明 贰:实现注解声明控制器与请求映射 一:使用controller 二:配置包扫描与视图解析器 1.配置包扫描 2.配置试图解析器 三:配置部署描述符 1.读取spring-mv ...
- springmvc学习(二)——使用RequestMapper请求映射
本次内容是@RequestMapping,后面会有实例代码 Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求在控制器的类定义及方法定义处都可标注@ ...
随机推荐
- Redis命令拾遗五(有序集合)
本文版权归博客园和作者吴双本人共同所有,博客园蜗牛NoSql系列分享 http://www.cnblogs.com/tdws/tag/NoSql/ Sorted Set 有序集合—Sorted Set ...
- 解决NTKO Office中文文件名保存到服务器时出现乱码的问题
再使用NTKO office控件时,在ntko往服务器提交文件时,中文文件名会出现乱码的问题! 其实解决这个问题可以换一种思路,在ntko往服务器提交文件时英文肯定是不会出现乱码的问题的! 那么想办法 ...
- Struts+Spring+Hibernate项目的启动线程
在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...
- C#模拟HTTP Form请求上传文件
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...
- 深入理解javascript闭包(二)
在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入.本人经过一段时间的学习,对闭包的概念又有了新的理解.于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给 ...
- 大数据下BI产品如何发挥最大价值
看到这个题目,你是否总感觉云里雾里?你是否真正懂什么叫“大数据”?商业智能BI和大数据又有着什么千丝万缕的联系?为什么说商业智能BI能在大数据中发挥价值? 大数据,指的是所涉及的数据资料量规模巨大到无 ...
- SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据
这个(BOL里面)最重要的类值得一看. BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示.至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作.在业务场景中,我们也许 ...
- shift粘滞键后门创建/复原批处理
创建shift粘滞键后门: 1 c: 2 3 cd \Windows\System32\ 4 5 rename sethc.exe bak_sethc.exe 6 7 xcopy cmd.exe se ...
- 使用Kotlin对ViewGroup的视图进行函数使操作
原文标题:Functional operations over Views in ViewGroup using Kotlin 原文链接:http://antonioleiva.com/functio ...
- [swift]NSURLSession
一.简单说明 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作. NSURLSession ...