В запросе 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)
Ответы
Ответ 1
@RequestParam связывает параметр запроса с параметром в вашем методе. В вашем примере значение параметра с именем "portfolioIdRequest" в запросе GET будет передано в качестве аргумента "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
Ответ 2
@RequestParam идентифицирует параметр HTTP GET или POST, который отправляется клиентом (пользователем), а @RequestMapping извлекает сегмент URL, который отличается от запроса для запроса:
http://host/?var=1
В приведенном выше URL "var" используется requestparam.
http://host/registration/{which}
и выше URL {which} является отображением запроса. Вы можете позвонить в службу, например:
http://host/registration/user
ИЛИ, например,
http://host/registration/firm
В вашем приложении вы можете получить доступ к значению {which} (В первом случае, который = "пользователь", а во втором - "фирма".
Ответ 3
Это зависит от способа обработки вашего запроса.
@RequestParam example
(request)http://something.com/owner?ownerId=1234
@PathVariable example
(request) http://something.com/owner/1234
(in tour code) /owner/{ownerId}