在Spring 3.0 GET请求中,@ PathVariable和@RequestParam有什么区别


问题内容

在下面的示例中,a @PathVariable和a有@RequestParam什么区别?

@RequestMapping(value = "/portfolio/{portfolioIdPath}", method = RequestMethod.GET)
public final String portfolio(HttpServletRequest request, ModelMap model, 
@PathVariable long portfolioIdPath, @RequestParam long portfolioIdRequest)

问题答案:

@RequestParam 将请求参数绑定到方法中的参数。在您的示例中,GET请求中名为“ portfolioIdRequest”的参数的值将作为“
portfolioIdRequest”参数传递给您的方法。一个更具体的示例-如果请求URL是

http://hostname/portfolio/123?portfolioIdRequest=456

那么参数“ portfolioIdRequest”的值将为“ 456”。

此处提供更多信息http :
//static.springsource.org/spring/docs/3.0.x/spring-framework-
reference/html/mvc.html#mvc-ann-
requestparam

@PathVariable 同样将URI模板变量“ portfolioIdPath”的值绑定到方法参数“
portfolioIdPath”。例如,如果您的URI是

/portfolio/123

那么“ portfolioIdPath”方法参数的值将为“ 123”。

此处提供更多信息http :
//static.springsource.org/spring/docs/3.0.x/spring-framework-
reference/html/mvc.html#mvc-ann-requestmapping-uri-
templates