springmvc @RequestMapping映射请求
2016-04-11 15:45
363 查看
springmvc 使用@RequestMapping来拦截路径,将路径拦截到某个controller某个方法进行具体处理,@RequestMapping可以在类级别上注解以及方法级别上注解
看看@RequestMapping注解源码
拦截多个路径
@RequestMapping不写具体key时候,默认是按key为value拦截且拦截一个,如果你想拦截多个路径,可以这样子配置
利用{…}匹配变量,利用@PathVariable 可以将变量绑定在方法入参中获取
利用正则表达式来匹配路径,语法为{varName:regex},varName是变量,regex是具体的正则匹配,可以用@PathVariable将varName绑定在方法入参中,然后获取,例如下面的例子这样子请求”/spring-web/spring-web-3.0.5.jar”
支持Ant的rest风格
Ant的rest风格和{…}模式混合匹配
后缀模式匹配
springmvc在配置”/findTaskList”这样子的路径时,如果用户路径是”/findTaskList/”,”/findTaskList.xml”,”/findTaskList.json”都会进入到findTaskList方法中。可以在配置文件中配置后缀
suffix-pattern匹配后缀,如.xml,.json默认是true,trailing-slash匹配”/”,如“/findTaskList/”默认是true。
矩阵匹配,可以匹配 URI RFC 398 标准的路径,如/cars;color=red;year=2012”的key和value类型的路径,需要在配置中打开矩阵请求允许
其他参数匹配,method ,params,headers,consumes,produces
匹配method ,能按照请求方法匹配,如POST,GET,PUT等
用params匹配具体的参数,以key=value或者key!=value存在
用headers匹配请求的头部信息,以key = value或者key != value存在
用consumes匹配请求头部的Content-Type
用produces匹配请求头部的accpet
@Controller @RequestMapping("/task") public class TaskController { @RequestMapping(value = { "", "/" }) public String whatPage() { return "task/task" ; } @RequestMapping("/mvcTest1") public void mvcTest1( HttpServletRequest req, HttpServletResponse res, @CookieValue("JSESSIONID") String sessionId, @RequestParam(value = "param", required = false) String param, @RequestHeader(value = "Accept-Encoding", required = false) String encoding, @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss") Date date , Integer type, @Validated Task task ) { } }
看看@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 {}; }
拦截多个路径
@RequestMapping不写具体key时候,默认是按key为value拦截且拦截一个,如果你想拦截多个路径,可以这样子配置
@RequestMapping(value = { "", "/" }) public String whatPage() { return "task/task" ; }
利用{…}匹配变量,利用@PathVariable 可以将变量绑定在方法入参中获取
@RequestMapping("/pets/{petId}") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { // ... }
利用正则表达式来匹配路径,语法为{varName:regex},varName是变量,regex是具体的正则匹配,可以用@PathVariable将varName绑定在方法入参中,然后获取,例如下面的例子这样子请求”/spring-web/spring-web-3.0.5.jar”
@RequestMapping("/spring-web/{symbolicName:[a-z-]}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]}") public void handle(@PathVariable String version, @PathVariable String extension) { // ... }
支持Ant的rest风格
/** *匹配如/task/aaa/saveTask,/task/bbb/saveTask */ @RequestMapping("/task/*/saveTask") public void saveTask1() { // ... } /** *匹配如/task/aaa/bbb/saveTask,/task/aaa/bbb/ccc/saveTask */ @RequestMapping("/task/**/saveTasks") public void saveTask2() { // ... } /** *匹配如/task/saveTask1,/task/saveTask2 */ @RequestMapping("/task/saveTasks??") public void saveTask3() { // ... }
Ant的rest风格和{…}模式混合匹配
@RequestMapping("/task/**/findTaskById/{taskId}") public void saveTask4(@PathVariable Long taskId ) { // ... }
后缀模式匹配
/** * 获取任务栏 */ @RequestMapping("/findTaskList") public void findTaskList(@PathVariable Long taskId ) { // ... }
springmvc在配置”/findTaskList”这样子的路径时,如果用户路径是”/findTaskList/”,”/findTaskList.xml”,”/findTaskList.json”都会进入到findTaskList方法中。可以在配置文件中配置后缀
<!-- 注解驱动 --> <mvc:annotation-driven > <mvc:path-matching suffix-pattern="false" trailing-slash="false" /> </mvc:annotation-driven>
suffix-pattern匹配后缀,如.xml,.json默认是true,trailing-slash匹配”/”,如“/findTaskList/”默认是true。
矩阵匹配,可以匹配 URI RFC 398 标准的路径,如/cars;color=red;year=2012”的key和value类型的路径,需要在配置中打开矩阵请求允许
// GET /pets/42;q=11;r=22 @RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET) public void findPet(@PathVariable String petId, @MatrixVariable int q) { // petId == 42 // q == 11 } //在dispatch-content.xml配置打开允许矩阵请求格式 <mvc:annotation-driven enable-matrix-variables="true"> </mvc:annotation-driven>
其他参数匹配,method ,params,headers,consumes,produces
匹配method ,能按照请求方法匹配,如POST,GET,PUT等
@RequestMapping(value = "/saveTask", params = RequestMethod.POST) public void saveTask(Task task) { // ... }
用params匹配具体的参数,以key=value或者key!=value存在
@RequestMapping(value = "/findTaskByTaskName", params="taskName = mytask") public void findTaskByTaskName(String taskName) { // ... } @RequestMapping(value = "/findTaskByTaskName", params="taskName != mytask") public void findTaskByTaskName(String taskName) { // ... }
用headers匹配请求的头部信息,以key = value或者key != value存在
@RequestMapping(value = "/findTaskByTaskName", headers="Accept-Charset=iso-8859-1") public void findTaskByTaskName(String taskName) { // ... }
用consumes匹配请求头部的Content-Type
@RequestMapping(value = "/findTaskByTaskName", consumes="application/json") public void findTaskByTaskName(String taskName) { // ... }
用produces匹配请求头部的accpet
@RequestMapping(value = "/findTaskByTaskName", produces="application/json") public void findTaskByTaskName(String taskName) { // ... }
相关文章推荐
- Android下的EXIF是什么
- 史上最牛android studio下载(更新)
- 给 Android 开发者的 RxJava 详解
- Android--这些小工具让你的Android 开发更高效
- Android OpenGL ES 2.0 的开发思路总结
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
- android图片文件的路径地址与Uri的相互转换
- Android课程---视图组件总结(2)
- Android课程---关于下拉列表与状态栏提示的学习
- Android NFC 开发实例
- Android连接指定的wifi热点
- 转: WebView载入一个网页 但是退出对应的activity时, 声音、视频无法停止播放 解决方案(未验证)
- android开发:加速模拟器如真机运行
- 加快AndroidStudio运行速度的方法
- 完美解决Android三星手机从图库选择照片旋转问题
- android AsyncTask介绍 AsyncTask和Handler对比
- Android View事件派发机制详解与源码分析
- Android 多线程-----AsyncTask详解
- iOS coredata
- Android小游戏------猜数字