博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC之RequestMapping
阅读量:6039 次
发布时间:2019-06-20

本文共 5892 字,大约阅读时间需要 19 分钟。

第一部分、概述

/**映射URL到控制器类或处理程序*/

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @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/ass

4.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;    }}

  

第七部分:其他

您准备用么?

 

转载于:https://www.cnblogs.com/yuanyee/p/6289259.html

你可能感兴趣的文章
[译] 听说你想学 React.js ?
查看>>
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>
基于清单的启动器的实现
查看>>
外网用户通过citrix打印慢的解决方法
查看>>
STL容器的使用
查看>>
关于std::map
查看>>
JXL导出Excel文件兼容性问题
查看>>
VBoot1.0发布,Vue & SpringBoot 综合开发入门
查看>>
centos7 安装wps 后 演示无法启动
查看>>
git简单命令
查看>>
LAMP编译部署
查看>>