Spring系列——@RequestMapping

原文链接:http://www.dubby.cn/detail.html?id=9044

1. 基本用法

可以修饰类,也可以修饰方法。修饰类是代表URI由此类(controlller)里的方法处理,修饰方法是详细指定哪个方法处理哪个URI请求。

2. HTTP方法

method可以指定特定的HTTP方法才可以映射:

@RequestMapping(path = "/hello", method = RequestMethod.GET)

支持的方法有GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE.

3. URI 映射

基于普通的URI

这种是最简单的url映射,可以接收到/hello这样的请求

@RequestMapping("/hello")
    public @ResponseBody String test() {
        return "hello!";
    }

基于多个普通的URI路径

@RequestMapping可以同时指定多个url,映射到同一个应答逻辑中:

    @RequestMapping(value={"/multi1","/multi2","/test/multi"})
    public @ResponseBody String multiUrl() {
        return "test multi url";
    }

基于路径变量的URI映射

这种URL映射可以直接在路径上指定变量,通过@PathVariable可以获得对象。

    @RequestMapping(value="/user1/{name}")
    public @ResponseBody String basicUrl1(@PathVariable String name){
        return "hello"+name;
    }
    @RequestMapping(value="/user2/{name}/test")
    public @ResponseBody String basicUrl2(@PathVariable String name){
        return "hello"+name+"test";
    }
    @RequestMapping(value="/user1/{name}/test/{age}")
    public @ResponseBody String basicUrl3(@PathVariable String name,@PathVariable int age){
        return "hello"+name+" age"+age;
    }

基于通配风格的URI映射

规则参见ANT

  • ? 匹配任何单字符
    • 匹配0或者任意数量的字符
  • ** 匹配0或者更多的目录
RequestMappingURI
@RequestMapping(value=”/ant1?”)/ant1a和/ant1b和/ant1c
@RequestMapping(value=”/ant2*”)/ant2aaaa和/ant2bbbb和/ant2cccc
@RequestMapping(value=”/ant3/*”)/ant3/aaaa和/ant3/1234和/ant3/12ab
@RequestMapping(value=”/ant4/**”)/ant4/和/ant4/aaa和/ant4/aaa/123

混用统配和路径变量

@RequestMapping(value="/ant5/**/{name}")
    public @ResponseBody String ant5(@PathVariable String name){
        return "ant+url  "+name;
    }

最后一个会被当作name参数.

基于正则的URI映射

语法是{varName:regex},其中第一部分定义了变量名,第二部分就是所要应用的正则表达式。比如下面的代码样例:

 @RequestMapping(value="/student/{name:\\w+}-{age:\\d+}")
    public @ResponseBody String regUrl(@PathVariable String name,@PathVariable int age){
        return "name:"+name+" age:"+age;
    }

用后面的正则来匹配前面的参数.

4. 消费的媒体类型

consumes可以指定一组可消费的媒体类型,缩小映射的范围。这样只有当请求头中Content-Type 的值与指定可消费的媒体类型中有相同的时候,请求才会被匹配。比如:

@RequestMapping(path = "/hello", method = RequestMethod.POST, consumes="application/json")

指定可消费媒体类型的表达式中还可以使用否定,比如,可以使用!text/plain 来匹配所有请求头Content-Type中不含text/plain的请求。同时,在MediaType类中还定义了一些常量,比如APPLICATION_JSON_VALUE、APPLICATION_JSON_UTF8_VALUE等,推荐更多地使用它们。

5. 生产的媒体类型

produces可以指定一组生产的媒体类型,缩小映射的范围。这样只有当请求头中Accept的值与指定可生产的媒体类型中有相同的时候,请求才会被匹配。而且,使用produces条件可以确保用于生成响应的内容与指定的可生产的媒体类型是相同的。比如:

@RequestMapping(path = "/hello", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

可生产的媒体类型表达式也可以使用否定。比如,可以使用!text/plain来匹配所有请求头Accept中不含text/plain的请求。

6. 请求参数与请求头的值

可以筛选请求参数的条件来缩小请求匹配范围,比如"myParam""!myParam""myParam=myValue"等。前两个条件用于筛选存在/不存在某些请求参数的请求,第三个条件筛选具有特定参数值的请求。下面的例子展示了如何使用请求参数值的筛选条件:

@RequestMapping(path = "/hello", params="myParam=myValue")
@RequestMapping(path = "/hello", headers="myHeader=myValue")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值