`

关于springmvc中Matrix Variables的用法

 
阅读更多

版本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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics