• Spring MVC之RequestMapping


    第一部分、概述

    /**映射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
    */
    @Controller
    public 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
    */
    @Controller
    public 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;
        }
    }
    

      

    第七部分:其他
    您准备用么?

  • 相关阅读:
    [CTSC2018]暴力写挂
    【bzoj 2870】 最长道路tree
    [CTSC2010]珠宝商
    [JXOI2018]守卫
    [JXOI2018]排序问题
    [AHOI2014/JSOI2014]骑士游戏
    [SNOI2017]遗失的答案
    【LGP5437】【XR-2】约定
    【LGP5349】幂
    hdu-2688 Rotate---树状数组+模拟
  • 原文地址:https://www.cnblogs.com/yuanyee/p/6289259.html
Copyright © 2020-2023  润新知