Spring MVC @PathVariable

作者:範宗雲 来源:原创 发布时间:2015-03-22 归档:springmvc

开发环境 : JDK 7 Maven 3 Tomcat 7 Spring 4.1.5 Eclipse Luna
@PathVariable 注解用于绑定处理方法的参数到 URI 模板变量中。
示例代码片段 1
			@Controller
			@RequestMapping("/product")
			public class ProductController {
			
				@RequestMapping(value = "/find/{id}", method = GET)
				public String find(Model model, @PathVariable int id) {
					model.addAttribute(MESSAGE, "find " + id);
					return RESULT_PAGE;
				}
			
			}
			
{id} 是一个变量, 使用 @PathVariable 注解可以将该变量绑定到处理方法参数中。
如 GET /product/find/31100042, 处理方法 find 执行时, 31100042 将作为处理方法参数 id 的值被设置进去。
示例代码片段 2
			@Controller
			@RequestMapping("/product")
			public class ProductController {
			
				@RequestMapping(value = "/fetch/{name}/{specs}", method = GET)
				public String fetch(Model model, @PathVariable("name") String p1, @PathVariable("specs") String p2) {
					model.addAttribute(MESSAGE, "fetch " + p1 + " " + p2);
					return RESULT_PAGE;
				}
			
			}
			
若处理方法的参数绑定的变量与模板中的变量名不一致, 则需要在处理方法中用 value 注解显式的指明参数绑定的是模板中的哪个变量。
GET /product/fetch/vitamin/5ml --> fetch --> p1 == vitamin, p2 == 5ml
示例代码片段 3
			@Controller
			@RequestMapping("/product")
			public class ProductController {
			
				@RequestMapping(value = "/delete/{productId:[1-9]\\d*}", method = GET)
				public String delete(Model model, @PathVariable int productId) {
					model.addAttribute(MESSAGE, "delete product by id [ " + productId + " ]");
					return RESULT_PAGE;
				}
			
			}
			
@RequestMapping 注解在 URI 模板变量中支持正则表达式, 语法 :{变量名:正则表达式}。
通过 @PathVariable 注解即可绑定该模板变量到处理方法的参数中。
GET /product/delete/*, 当 * 部分为一个正整数时 ( [1-9]\d* 用于匹配正整数 ), 处理方法 delete 被执行, 否则报 404
GET /product/delete/31100042 --> delete --> 31100042
GET /product/delete/03110004 --> 404 Error
示例代码片段 4
			@Controller
			@RequestMapping("/product")
			public class ProductController {
			
				@RequestMapping(value = "/query/{category}/{price}/{sort}", method = GET)
				public String query(Model model, @PathVariable Map<String, Object> params) {
					model.addAttribute(MESSAGE, "the query params are " + params);
					return RESULT_PAGE;
				}
			
			}
			
当 @PathVariable 注解标注在 Map 类型参数上时 ( 参数名任意 ), 该参数包含 URI 模板中所有的变量。
GET /product/query/books/10-100/desc --> query --> {category=books, price=10-100, sort=desc}

示例代码下载
spring-mvc-path-variable.zip