Статьи

Различия между аннотациями @RequestParam и @PathVariable в Spring MVC?

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