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

  

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

时间: 2024-11-04 21:34:00

Spring MVC之RequestMapping的相关文章

Spring mvc中@RequestMapping 6个基本用法小结

小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码 @RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; } 则访问http://localho

Spring mvc中@RequestMapping 6个基本用法小结(转载)

小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码   @RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; } 则访问http://local

(转载)Spring mvc中@RequestMapping 6个基本用法小结

小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码 @RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; } 则访问http://localho

Spring MVC - 02 RequestMapping映射请求

使用 @RequestMapping 映射请求 1.SpringMVC 使用@RequestMapping 注解为 控制器 指定可以处理哪些URL 请求 2. 在控制器的 类定义 及 方法定义处 都可以标注@RequestMapping 类定义处: 提供初步的请求映射信息. 相对于 WEB 应用的根目录 方法处: 提供进一步的细分映射信息.相对于类定义处的URL.若类定义处未标注 @RequestMapping,则方法 处标记的URL 相对于WEB 应用的根目录 3.DispatcherServ

Spring MVC的@RequestMapping多个URL映射到同一个方法

@RequestMapping可以是一个URL对应一个方法,也可以多个URL对应同一个方法,写法如下: @RequestMapping(value={"url","resturl"}) public String url() { return "url"; }

Spring MVC之@RequestMapping 详解

引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, 而且服务器端通过request.getReader() 打出的数据里确实存在浏览器提交的数据.为了找出原因,便对参数绑定(@RequestParam. @RequestBody. @RequestHeader . @PathVariable)进行了研究,同时也看了一下HttpMessage

Spring MVC之@RequestMapping基本用法

1.方法级别上的应用: 1 @RequestMapping(value="/department") 2 3 public String simpleDapatment(){ 4 5 system.out.println(""); 6 return ("result"); 7 } 访问 http://localhost/XXXX/department 时,调用simpledepatment方法. 2.参数绑定 @RequestMapping(va

二、Spring MVC的RequestMapping注解

上一篇文章搭建起来了hello world.今天主要来看看RequestMapping注解都有什么用法和功能.上一篇文章说了,RequestMapping可以用来映射URL,可以用在类上,也可以用在方法上面. RequestMapping有以下几个属性:value.method.params.headers,下面简单说一下属性的功能 value:映射请求的url,当只定义一个url的时候,可以不写,即以下两种方式等价: @RequestMapping("/testRequestMapping&q

Spring MVC的RequestMapping的详解

1.RequestMappingRequestMapping有类级的和方法级两个级别的,其包含的属性有value,method,consumes,producesvalue表示要响应的URL地址.method表示响应的请求方法 2.Uri template 在对RequestMapping注解时可以设置其value对应了要处理的请求地址.在这里可以用个uri template来使方法响应符合该模板的请求地址, 2.1 uri template 变量:例如:/user/{userid},useri

[转]Spring MVC之@RequestMapping 详解

前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为application/json, 而且服务器端通过request.getReader() 打出的数据里确实存在浏览器提交的数据.为了找出原因,便对参数绑定(@RequestParam. @RequestBody. @RequestHeader . @PathVariable)进行了研究,同时也看了一下HttpMessageConv