RequestMapping的映射URL模板

映射的URL中有占位符变量,符合这个映射关系的请求都会被这个handler方法处理,下面就是一个模板例子。

/template/hello/jack和/template/hello/devin等等这样形式的请求都会被处理

@Controller
@RequestMapping(value = "/template")
public class URLTemplateController {

    @RequestMapping(value = "/hello/{name}")
    @ResponseBody
    public String hello(@PathVariable(value = "name") String name){
        return String.format("hello %s", name);
    }
}

@PathVariable

获取占位符变量的值,上面那个例子name值就是jack或devin。支持多个占位符,可以是Map获取占位符变量值。

@RequestMapping(value = "/customer/{name}/order/{id}")
    @ResponseBody
    public String multiPathVariable(@PathVariable Map<String, String> vars){
        return String.format("name %s, id %s", vars.get("name"), vars.get("id"));
    }

注意:多个占位符使用map获取值,记得在beans 添加<mvc:annotation-driven/>,否则会报错误:Could not find @PathVariable [vars] in @RequestMapping


正则表达式

语法:{变量名:正则表达式},例如:只匹配单词字符的name

@RequestMapping(value = "/regexp/{name:\\w}")
    @ResponseBody
    public String regexp(@PathVariable(value = "name") String name){
        return String.format("hello %s", name);
    }

Ant路径模式

在映射URL中可以包含通配符(*),例如:/ant/*SpringMVC自动执行 ".*" 的后缀匹配,匹配/ant/user时,也会匹配/ant/user.*


占位符和路径模式比较

当一个URL匹配多个模式时,会找一个更具体模式进行匹配
a、模式中的 URI 模版变量和通配符的数量相对较少。如:/hotels/{hotel}/* 相对 /hotels/{hotel}/** 更具体
   b、两个模式中的 URI 模版变量和通配符数量相同时,更详细的那一个会认为相对适合。如 /foo/bar* 比 /foo/* 更具体
   c、当两个模式中变量个数详细程度相同时,模板比通配符更具体,如/hotels/{hotel}比/hotels/*更具体
   d、任意模式都比默认全匹配 /** 模式更具体;任意不包含两个通配符的模式都比前缀模式(如 /public/**) 更加具体。/public/path3/{a}/{b}/{c} 比 /public/** 更具体

矩阵变量

语法:每个矩阵变量用分号隔开,例如:/cars;color=red;year=2012,矩阵变量有多个值时,用逗号隔开,例如:color=red,green,blue,也可以这样color=red;color=green;color=blue。 包含矩阵变量的URL必须是一个URL模板,才能确保请求被正确匹配到。
支持矩阵变量还需要在beans文件中加上配置:
<mvc:annotation-driven enable-matrix-variables="true"/>
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
    @ResponseBody
    public String findPet(
            @MatrixVariable Map<String, String> matrixVars,
            @MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars) {
        //matrixVars {q=[11, 22], r=[12], s=[23]}
        //petMatrixVars {q=[22], s=[23]}
        return matrixVars.toString()+"  "+petMatrixVars.toString();
    }
pathVar是指占位符变量( 模板变量),即获取模板变量后面的矩阵变量



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值