在Spring 3.0 GET请求中,@ PathVariable和@RequestParam之间的区别是什么

时间:2010-11-01 23:31:04

标签: java spring spring-mvc

在以下示例中,@PathVariable@RequestParam之间有什么区别?

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

3 个答案:

答案 0 :(得分:17)

@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

答案 1 :(得分:2)

@RequestParam标识客户端(用户)发送的HTTP GET或POST参数,而@RequestMapping提取URL的一段,该段因请求而异:

http://host/?var=1

在上面的网址“var”是一个请求参数。

http://host/registration/{which}

以上网址的 {which} 是请求映射。您可以将您的服务称为:

http://host/registration/user

或喜欢

http://host/registration/firm

在您的应用程序中,您可以访问 {which} 的值(在第一种情况下=“user”,在第二种情况下=“firm”。

答案 2 :(得分:0)

这取决于您希望如何处理您的请求

@RequestParam example
(request)http://something.com/owner?ownerId=1234

@PathVariable example
(request) http://something.com/owner/1234
(in tour code) /owner/{ownerId}