Платформа 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, являются их собственными. |
