码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC 使用介绍(六)—— 注解式控制器(二)

时间:2018-06-12 18:32:49      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:eth   accept   ant风格   product   包括   isp   param   控制器   servlet   

一、概述

    技术分享图片

注解式控制器支持:

  • 请求的映射和限定
  • 参数的自动绑定
  • 参数的注解绑定

 

二、请求的映射和限定

http请求信息包含六部分信息:

①请求方法;
②URL;
③协议及版本;
④请求头信息(包括Cookie信息);
⑤回车换行(CRLF);
⑥请求内容区;

其中,①、②、④、⑥一般是可变的,可根据这些信息对处理方法进行映射,具体分为:

  • URL路径映射:使用URL映射请求到处理器的功能处理方法
  • 请求方法映射限定:如限定功能处理方法只处理GET请求
  • 请求参数映射限定:如限定只处理包含“abc”请求参数的请求
  • 请求头映射限定:如限定只处理“Accept=application/json”的请求

1、URL路径映射

i)普通URL路径映射

@RequestMapping(value="/user/create")
@RequestMapping(value={"/test1", "/user/create"})

ii)URI模板模式映射,可通过@PathVariable提取模板变量

@RequestMapping(value="/users/{userId}"):请求的URL可以是 “/users/123456”或“/users/abcd”
@RequestMapping(value="/users/{userId}/create"):请求的URL可以是“/users/123/create”。
@RequestMapping(value="/users/{userId}/topics/{topicId}"):请求的URL可以是“/users/123/topics/123”

iii)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模板变量风格可混用

iv)正则表达式风格的URL路径映射,可通过@PathVariable提取模板变量

@RequestMapping(value="/products/{categoryCode:\\d+}-{pageNumber:\\d+}"):格式为{变量名:正则表达式},可以匹配“/products/123-1”,但不能匹配“/products/abc-1”

2、请求方法映射限定

@RequestMapping(value="/hello", method = RequestMethod.POST)
@RequestMapping(value="/hello", method = {RequestMethod.POST, RequestMethod.GET})

DispatcherServlet默认开启对 GET、POST、PUT、DELETE、HEAD的支持

3、请求参数映射限定

@RequestMapping(value = "/hello", params = "create"):表示请求中有“create”的参数名即可匹配,如可匹配的请求URL“http://×××/parameter1?create”
@RequestMapping(value = "/hello", params = "!create"):表示请求中没有“create”参数名即可匹配
@RequestMapping(value = "/hello", params = "submitFlag=create"):表示请求中有“submitFlag=create”请求参数即可匹配
@RequestMapping(value = "/hello", params = "submitFlag!=create"):表示请求中有submitFlag但不等于create即可匹配
@RequestMapping(value = "/hello", params = {"test1", "test2=create"}):表示请求中的有“test1”参数名 且 有“test2=create”参数即可匹配

4、请求头映射限定

@RequestMapping(value="/hello", headers = "Accept"):表示请求的URL必须为“/hello”且请求头中必须有Accept参数才能匹配
@RequestMapping(value="/hello", headers = "!abc"):表示请求的URL必须为“/hello”且请求头中必须没有abc参数才能匹配
@RequestMapping(value="/hello", headers = "Content-Type=application/json"):表示请求的URL必须为“/hello”且请求头中必须有“Content-Type=application/json”参数才能匹配
@RequestMapping(value="/hello", headers = "Accept!=text/vnd.wap.wml"):表示请求的URL必须为“/hello”且请求头中必须有Accept但不等于“text/vnd.wap.wml”才能匹配
@RequestMapping(value="/hello", headers = {"Accept!=text/vnd.wap.wml","abc=123"}):表示请求的URL必须为“/hello”且请求头中必须有Accept但不等于“text/vnd.wap.wml”且请求中必须有参数“abc=123”才能匹配

 

三、参数的自动绑定

当功能方法参数列表中包含特定类型的参数时,Spring Web MVC框架会自动帮助我们把相应的参数传递过来,如HttpServletRequest 或HttpServletResponse,从而可以获取输入参数或输出数据,但使用不方便,推荐使用注解方式

 

Spring MVC 使用介绍(六)—— 注解式控制器(二)

标签:eth   accept   ant风格   product   包括   isp   param   控制器   servlet   

原文地址:https://www.cnblogs.com/MattCheng/p/9174421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!