Платформа Spring MVC, одна из самых популярных платформ для разработки веб-приложений в мире Java, также предоставляет несколько полезных аннотаций для извлечения данных из входящего запроса и отображения запроса на контроллер, например, @RequestMapping, @RequestParam и @PathVariable.
Несмотря на то, что @RequestParam и @ParthVariable используются для извлечения значений из HTTP-запроса, между ними есть небольшая разница, что делает их полезными с точки зрения интервью и весенней сертификации . Мы рассмотрим тонкую разницу между
@RequestParam и @PathVaraible в этой статье. Как следует из названия, @RequestParam используется для получения параметров запроса из URL, также известного как параметры запроса, в то время как @PathVariable извлекает значения из URI.
Например, если входящий HTTP-запрос на получение книги по теме «Java» имеет вид http: // localhost: 8080 / shop / order / 1001 / recets? Date = 12-05-2017, то вы можете использовать аннотацию @RequestParam чтобы получить дату параметра запроса, и вы можете использовать @PathVariable, чтобы извлечь orderId, то есть «1001», как показано ниже:
01
02
03
04
05
06
07
08
09
10
|
@RequestMapping (value= "/order/{orderId}/receipts" , method = RequestMethod.GET) public List listUsersInvoices( @PathVariable ( "orderId" ) int order, @RequestParam (value = "date" , required = false ) Date dateOrNull) { ... } |
Обязательный = false означает, что параметр запроса может быть необязательным, но URL-адрес должен иметь тот же URI.
Как извлечь параметры запроса в Spring MVC с помощью @RequestParam
Spring MVC — это богатая среда для разработки веб-приложений и веб-сервисов RESTful на Java. Он предоставляет несколько способов извлечения данных из входящих HTTP-запросов, например
- Параметры запроса
- Переменные пути
- Форма ввода
Теперь, когда вы знаете разницу между @RequestParam и @PathVariable в Spring MVC, давайте посмотрим, как писать контроллеры Spring, которые могут обрабатывать параметры запроса и переменные пути.
Использование @RequestParam для получения параметров запроса
В приложении Spring MVC вы можете использовать аннотацию @RequestParam для принятия параметров запроса в методах обработчика контроллера.
Например, предположим, у вас есть веб-приложение, которое возвращает подробности о заказах и сделках, и у вас есть следующие URL:
1
|
http: //localhost :8080 /eportal/orders ? id =1001 |
Чтобы принять параметры запроса в приведенных выше URL-адресах, вы можете использовать следующий код в контроллере Spring MVC:
1
2
3
4
5
6
7
8
9
|
@RequestMapping ( "/orders" ) public String showOrderDetails( @RequestParam ( "id" ) String orderId, Model model){ model.addAttribute( "orderId" , orderId); return "orderDetails" ; } |
Если имя параметра запроса совпадает с именем переменной в аннотированном аргументе обработчика @RequestParam, то вы можете просто использовать @RequestParam без указания имени параметра запроса, Spring автоматически получит значение (см.
Введение в Spring MVC ).
Кроме того, вот код, чтобы доказать это:
1
|
URL:http: //localhost :8080 /eportal/trades ?tradeId=2001 |
01
02
03
04
05
06
07
08
09
10
11
|
@RequestMapping ( "/trades" ) public String showTradeDetails( @RequestParam String tradeId, Model model){ model.addAttribute( "tradeId" , tradeId); return "tradeDetails" ; } |
Вы можете видеть, что мы только что аннотировали параметр метода tradeId с помощью @RequestParam без указания имени параметра запроса, поскольку имя параметра запроса и имени аргумента совпадают, т. Е. «TradeId».
Если вы заинтересованы в получении дополнительной информации о @RequestParam, я предлагаю вам проверить введение Spring MVC 4 Брайана Хассена, чтобы узнать больше об аннотациях @RequestParam.
Использование аннотации @PathVariable для извлечения значений из URI
Вы можете использовать аннотацию Spring MVC @Path Varaible для извлечения любого значения, встроенного в сам URL. Spring называет его шаблоном URI, где @PathVariable используется для получения некоторых заполнителей из самого URI.
Если вы работали в Web-сервисах RESTful, вы можете знать, что REST URI содержат значения, например, REST API для получения книги с использованием номера ISBN выглядит следующим образом:
1
|
URL:http: //localhost :8080 /book/9783827319333 |
Теперь, чтобы извлечь значение номера ISBN из URI в методе обработчика контроллера Spring MVC, вы можете использовать аннотацию @PathVariable, как показано в следующем коде:
01
02
03
04
05
06
07
08
09
10
11
|
@RequestMapping (value= "/book/{ISBN}" , method= RequestMethod.GET) public String showBookDetails( @PathVariable ( "ISBN" ) String id, Model model){ model.addAttribute( "ISBN" , id); return "bookDetails" ; } |
Подобно аннотации @RequestParameter, вы также можете опустить атрибут value в аннотации @PathVariable, если имя заполнителя переменной пути в аннотации @RequestMapping совпадает с именем переменной в аннотированном параметре метода-обработчика @PathVariable (см. REST с Spring ).
Например, вы можете переписать код выше, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
|
@RequestMapping (value= "/book/{ISBN}" , method= RequestMethod.GET) public String showBookDetails( @PathVariable String ISBN, Model model){ model.addAttribute( "ISBN" , ISBN); return "bookDetails" ; } |
Spring MVC предоставляет несколько полезных аннотаций для сопоставления и извлечения данных из HTTP-запроса, и, как разработчик Spring, вы должны знать о них, например, @RequestMapping, @RequestParam и @PathVariable.
Эти концепции и аннотации очень важны как для собеседования в Spring MVC, так и для сертификации Spring. Вы всегда найдете пару вопросов, основанных на этих понятиях.
Кстати, если вы готовитесь к Spring Web Certificates, вы также можете проверить бесплатные Spring Mock Questions Дэвида Мейера, чтобы получить представление об уровне вопросов и формате вопросов, которые вы можете ожидать от настоящей Spring Web Certification.
Разница между @PathVariable и @RequestParam в Spring
Теперь, когда мы понимаем разницу, а также как использовать оба
@RequestParam и
@PathVariable в приложении Spring MVC, давайте рассмотрим ключевое различие между ними с точки зрения интервью.
1) @RequestParam используется для извлечения параметров запроса, в то время как @PathVariable используется для извлечения данных прямо из URI.
2) @RequestParam более полезен в традиционном веб-приложении, где данные в основном передаются в ограничениях запросов, а @PathVariable больше подходит для веб-служб RESTful, где URL-адрес содержит значения, например http: // localhost: 8080 / book / 9783827319333, здесь данные , который является номером ISBN, является частью URI.
Если вы хотите узнать больше о том, как эффективно разрабатывать REST-приложения с использованием Spring, я предлагаю вам присоединиться к Eugen Paraschiv’s
Отдых с весенним курсом.
Это онлайн-курс, который научит вас основам разработки как REST API, так и сервисов для реальных сценариев.
Евгений имеет большой опыт в разработке веб-сервисов RESTful с использованием Spring, и этот курс является отличным способом использовать его знания.
3) аннотация @RequestParam может указывать значения по умолчанию, если параметр запроса отсутствует или пуст, используя атрибут defaultValue, при условии, что обязательный атрибут равен false.
4) Spring MVC позволяет использовать несколько аннотаций @PathVariable в одном и том же методе, при условии, что не более одного аргумента имеют один и тот же шаблон.
Это все о разнице между @PathVariable и @RequestParam в Spring MVC . Хотя оба используются для извлечения данных из URL, @RequestParam используется для получения параметров запроса, что-нибудь после? в URL, тогда как @PathVariable используется для получения значений из самого URI. Эта концепция очень важна как для разработки традиционных веб-приложений, так и для разработки веб-служб RESTful с использованием Spring, поэтому вам нужно потратить некоторое время, чтобы лучше понять ее.
Другие статьи Spring MVC, которые вы можете изучить
Введение в Spring MVC 4 от Брайана Хассена
Разница между @RestController и @Controller в Spring MVC?
Как Spring MVC работает внутри?
Какая польза от DispatcherServlet в Spring MVC?
Как включить безопасность Spring в веб-приложении Java?
Спасибо за чтение этой статьи до сих пор. Если вам понравилась эта статья, пожалуйста, поделитесь с друзьями и коллегами. Если у вас есть какие-либо вопросы, пожалуйста, напишите мне.
См. Оригинальную статью здесь: Различия между аннотациями @RequestParam и @PathVariable в Spring MVC?
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |