В запросе 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}