第一部分、概述
/**映射URL到控制器类或处理程序*/
@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping {/**
* 指定映射名称 * 支持控制器和方法 * 同时支持控制器和方法时,使用"#"分隔 */ String name() default "";/**
* 路径映射 * 指定的地址可以是uri模板,别名为path,如:@RequestMapping("/foo"),@RequestMapping(path="/foo") * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均继承本映射 */ @AliasFor("path") String[] value() default {};/**
* 仅支持Servlet运行环境:路径映射URIs(如:"/myPath.do") * 支持Ant风格的路径模式 * 在控制器的方法这一层级,支持相对路径(如:"edit.do") * 在控制器层级,可包含占位符(如:/${connect}) * 当其用于控制器映射时,该控制器所有方法映射均继承本映射 */ @AliasFor("value") String[] path() default {};/**
* HTTP请求方式(谓词类型):GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE. * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均继承本映射 */ RequestMethod[] method() default {};/**
* 请求参数限定:限制客户端发送的请求参数为某些特定值或不为某些值。 * 使用方式:"myParam=myValue" 、"myParam!=myValue" * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均继承本映射 */ String[] params() default {};/**
* 请求头部 * 使用方式:"My-Header=myValue" 、"My-Header!=myValue" * 如:RequestMapping(value = "/something", headers = "content-type=text/*") * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均继承本映射 */ String[] headers() default {};/**
* 请求媒体类型(消耗型媒体类型)(text/html、text/plain、application/json;charset=UTF-8、application/octet-stream等等) * 如:consumes = "text/plain"、consumes = {"text/plain", "application/*"} * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均重写本映射 */ String[] consumes() default {};/**
* 响应媒体类型(生产型媒体类型)(text/html、text/plain、application/json;charset=UTF-8、application/octet-stream等等) * 如:consumes = "text/plain"、consumes = {"text/plain", "application/*"} * 支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均重写本映射 */ String[] produces() default {};}
第二部分:路径相关1、只注解方法
默认为根路径
访问路径:http://localhost:8080/auth/index.do
/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controllerpublic class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value = "/index.do", method = RequestMethod.GET) public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
2、同时注解控制器和方法
用根路径和方法路径叠加
访问路径:http://localhost:8080/auth/sso/index.do
/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value = "/index.do", method = RequestMethod.GET) public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
3、value为空
控制器上@RequestMapping的value为空 或者 没有@RequestMapping修饰,使用站点根路径
方法上@RequestMapping的value为空,使用控制器根路径以上前提:web.xml上放行默认路径,<url-pattern>/</url-pattern>访问路径:http://localhost:8080/auth/sso
/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controllerpublic class SsoController { //@Autowired //private AuthService authService; @RequestMapping public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
4、路径变量占位符
使用@PathVariable 注释方法参数的值绑定到一个URI模板变量访问路径:http://localhost:8080/auth/sso/index/1
/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping("/index/{id}") public ModelAndView index(@PathVariable int id) { ModelAndView mv = new ModelAndView("login"); return mv;}}
4.1)路径模板可以使用正则表达式
如:@RequestMapping(value="/index/{id:\\d{3}}/{name:[a-z]{3}}") 对应访问路径:http://localhost:8080/auth/sso/index/123/ass4.2)矩阵变量@MatrixVariable
矩阵变量可以出现在任何路径段,每个矩阵变量用“;”分隔 暂时未用到,用到的时候再说吧,个人不倾向于在地址中传递这么复杂的东西4.3)Ant风格路径模式
如/myPath/*.do,/myPath/*/auth/{uid} 第三部分:谓词类型用于约束请求类型,包含:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE,支持控制器和方法,当其用于控制器映射时,该控制器所有方法映射均继承本映射。一般标识方法。/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value="/index.do",method= RequestMethod.POST,RequestMethod.GET}) public ModelAndView index(@PathVariable int id,@PathVariable String name) { ModelAndView mv = new ModelAndView("login"); return mv; }}
第四部分:参数限定
映射请求的参数,限制客户端发送的请求参数为某些特定值或不为某些值。访问路径:http://localhost:8080/auth/sso/index.do?id=1&name=bbb http://localhost:8080/auth/sso/index.do?id=1&name=aaa/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value="/index.do" ,method={RequestMethod.POST,RequestMethod.GET} ,params={"id=1","name!=aaa"}) public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
第五部分:头部限定
映射请求的头部,限制客户端发送的请求头部信息必须包含某些值或不为某些值。如:/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value="/index.do" ,method={RequestMethod.POST,RequestMethod.GET} ,params={"id=1","name!=aaa"} ,headers="Host=localhost:8080" ) public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
第六部分:Content-Type限定
请求:@RequestMapping(value = "/action8",consumes="text/plain")响应:@RequestMapping(value = "/action8",consumes="text/html")如:
/*** @功能 权限控制器* @作者 Davee.Yuan* @日期 2017-01-16* @说明 http://localhost:8080/auth/index*/@Controller@RequestMapping("/sso")public class SsoController { //@Autowired //private AuthService authService; @RequestMapping(value="/index.do" ,method={RequestMethod.POST,RequestMethod.GET} ,params={"id=1","name!=aaa"} ,headers="Host=localhost:8080" ,produces="text/html" ) public ModelAndView index() { ModelAndView mv = new ModelAndView("login"); return mv; }}
第七部分:其他
您准备用么?