@PathVariable 和@RequestParam的区别

 

0

springmvc中@PathVariable和@RequestParam的区别0

我的url; 
http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2 
在controller中这么写: 
@RequestMapping(value="/page.do/{pageSize}/{pageNow}") 
public String page(@PathVariable int pageSize,@PathVariable int pageNow){} 
这个好像有问题。求解
2014年5月25日 10:13
 
 
 

3个答案按时间排序按投票排序

00

采纳的答案

http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2 

你可以把这地址分开理解,其中问号前半部分:http://localhost:8080/Springmvc/user/page.do 这个就是路径,是你的请求url,而如果这个路径上有数据匹配,用的就是@PathVariable  如 
@RequestMapping(value="/page{pageNo}.do") 
public String page(@PathVariable int pageNo){} 
【注意:看下这地方的@RequestMapping的地址,对照我上面说的路径】 

而问号的后面部分就是请求参数部分,是要向请求路径提交的参数信息,用的就是@RequestParam ,对于这种参数,如果你要用的话,代码应该如下: 
@RequestMapping(value="/page.do") 
public String page(@RequestParam int pageSize,@RequestParam  int pageNow){} 

【注意:这个代码的RequestMapping地址只需要/page.do就行】 


其实你只要把什么叫请求路径,什么叫请求参数分清楚,也就能理解@PathVariable和@RequestParam 

我再举个例子,就拿你这个问题在iteye上的地址为例,http://www.iteye.com/problems/101566 这个如果对应sprimgmvc里面,想获取问题编号101566,因为这个地址直接就是请求路径,是一个url,所以代码中用的应该是@PathVariable,如下: 
@RequestMapping(value="/problems/{problemId}") 
public String showProblem(@PathVariable int problemId){}

2014年5月26日 10:29
 
00

顾名思义, @PathVariable和@RequestParam,分别是从路径里面去获取变量,也就是把路径当做变量,后者是从请求里面获取参数。 

从你的请求来看: 

/Springmvc/user/page.do?pageSize=3&pageNow=2 

pageSize和pageNow应该是属于参数而不是路径,所以应该添加@RequestParam的注解。 

如果做成如下URL,则可以使用@PathVariable 

/Springmvc/user/page/2/3.do 

但这样的话语义就不明确的,所以一般来说分页参数都用参数传递。

2014年5月25日 11:39
 
00

两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,url不同 

@PathVariable的url是这样的:http://host:port/.../path/参数值 

@RequestMapping("/bookings/{booking}") 
public String getBooking(@PathVariable Long booking) { 




而@RequestParam的url是这样的:http://host:port/.../path?参数名=参数值 

@RequestMapping(method = RequestMethod.GET) 
    public String setupForm(@RequestParam("petId") int petId, ModelMap model) { 
        Pet pet = this.clinic.loadPet(petId); 
        model.addAttribute("pet", pet); 
        return "petForm"; 

    } 

posted @ 2017-03-23 10:41  guodaxia  阅读(195)  评论(0)    收藏  举报