版本spring4.x
注解@MatrixVariable可以将键值对写到路径中映射作为controller中的方法参数,使用前需要配置
1.RequestMappingHandlerMapping中属性removeSemicolonContent值为true
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="order" value="1"></property> <property name="removeSemicolonContent" value="true"></property> </bean>
2.配置开启
<mvc:annotation-driven enable-matrix-variables="true"/>
实例如下
// GET /m1/owners/42;q=11;r=12/pets/21;q=22;s=23 (官方示例有问题,此处无法找到)
// GET /m1/owners/q=11,12/pets/21;q=22;s=23
// (output matrixVars:{q=[11, 12, 22], s=[23]} petMatrixVars:{q=[22], s=[23]})
// 注意:如果/owners/***/pets/21;q=22;s=23中,***部分如果出现;(分号)就会找不到方法
@RequestMapping(value = "/m1/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public String findPet(@MatrixVariable Map<String, String> matrixVars,
@MatrixVariable(pathVar = "petId") Map<String, String> petMatrixVars) {
System.out.println(matrixVars+":matrixVars");
System.out.println(petMatrixVars+":petMatrixVars");
return "user_list";
}
// GET /pets/42;q=11;r=22 (output petId:42 q:11)
// GET /pets/q=11 (output petId:q=11 q:11)
@RequestMapping(value = "/m2/pets/{petId}", method = RequestMethod.GET)
public String findPet2(@PathVariable String petId, @MatrixVariable int q) {
System.out.println("petId:"+petId);
System.out.println("q:"+q);
return "user_list";
}
// GET /m3/owners/42;q=11/pets/21;q=22 (此处官方示例有点问题,这个路径无法找到方法)
// GET /m3/owners/q=4/pets/q=21
@RequestMapping(value = "/m3/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public String findPet3(@MatrixVariable(value = "q", pathVar = "ownerId") int q1,
@MatrixVariable(value = "q", pathVar = "petId") int q2) {
System.out.println("q1:"+q1); // q1:4
System.out.println("q2:"+q2); // q2:21
return "user_list";
}
后来又测试了下removeSemicolonContent这个属性可以不用配置,默认就是true