在网上看了一篇很好的文章,讲的很清楚明了,说到了点子上(转自:https://blog.csdn.net/chuck_kui/article/details/55506723):
首先 上两个地址:
地址① http://localhost:8989/SSSP/emps?pageNo=2
地址② http://localhost:8989/SSSP/emp/7 (7这个参数叫“动态参数”)
如果想获取地址①中的 pageNo的值 ‘2’ ,则使用 @RequestParam,
如果想获取地址②中的 emp/7 中的 ‘7 ’ 则使用 @PathVariable
获取地址① 中的‘2’ 使用的 方法是如下:
1 @RequestMapping("/emps") 2 public String list(@RequestParam(value="pageNo",required=false, 3 defaultValue="1")String pageNoStr,Map<String, Object>map){ 4 5 int pageNo = 1; 6 try { 7 //对pageNo 的校验 8 pageNo = Integer.parseInt(pageNoStr); 9 if(pageNo<1){ 10 pageNo = 1; 11 } 12 } catch (Exception e) { 13 } 14 Page<Employee> page = employeeService.getPage(pageNo, 5); 15 map.put("page",page); 16 17 return "emp/list"; 18 }
获取地址② 中的 ‘7’ 使用的方法是如下:
1 @RequestMapping(value="/emp/{id}",method=RequestMethod.GET) 2 public String edit(@PathVariable("id")Integer id,Map<String , Object>map){ 3 Employee employee = employeeService.getEmployee(id); 4 List<Department> departments = departmentService.getAll(); 5 map.put("employee", employee); 6 map.put("departments", departments); 7 return "emp/input"; 8 }
大道理不讲 原理也不分析就记忆一点,那一点呢? 看‘这个符号‘?’
1. 若获取的入参的 参数 是下面这种形式 就使用 @requestParam 去获取 参数‘2’
/emps?pageNo=2
2. 若获取的入参的 参数 是下面这种形式 就使用 @PathVariable 去获取参数 ‘7’
/emp/7
@PathVariable是用来获得请求url中的动态参数的
理论 可看 下面的博文
http://blog.csdn.net/walkerjong/article/details/7946109
@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
http://dorole.com/tag/uri-template/
http://blog.csdn.net/jaryle/article/details/51851120
@pathvariable和@RequestParam注解的区别
使用动态参数的例子:
页面:
1 function login() { 2 var url = "${pageContext.request.contextPath}/person/login/"; 3 var query = $('#id').val() + '/' + $('#name').val() + '/' + $('#status').val(); 4 url += query; 5 $.get(url, function(data) { 6 alert("id: " + data.id + "name: " + data.name + "status: " 7 + data.status); 8 }); 9 }
后台:
1 /** 2 * @RequestMapping(value = "user/login/{id}/{name}/{status}") 中的 {id}/{name}/{status} 3 * 与 @PathVariable int id、@PathVariable String name、@PathVariable boolean status 4 * 一一对应,按名匹配。 5 */ 6 7 @RequestMapping(value = "user/login/{id}/{name}/{status}") 8 @ResponseBody 9 //@PathVariable注解下的数据类型均可用 10 public User login(@PathVariable int id, @PathVariable String name, @PathVariable boolean status) { 11 //返回一个User对象响应ajax的请求 12 return new User(id, name, status); 13 }