Вступление:
Spring @RequestParam аннотация может использоваться для извлечения параметров запроса в методе обработчика. В этом кратком руководстве мы узнаем, как его использовать.
@RequestParam Аннотация:
Давайте сначала представим API, который возвращает список пользователей с указанным именем и возрастом:
|
1
2
3
4
5
6
7
8
|
@RestControllerpublic class UserController { ... @GetMapping("/users") public List<User> getUsers(@RequestParam String firstName, @RequestParam int age) { return userService.findUsersWith(firstName, age); }} |
А теперь давайте воспользуемся cURL, чтобы быстро проверить это:
|
1
2
3
4
|
curl -XGET 'http://localhost:8080/users?firstName=John&age=15'...[{firstName = John ,lastName = Mason ,age = 15} , {firstName = John ,lastName = Dash ,age = 15}] |
Как мы видим, firstName и age — это параметры запроса, которые правильно сопоставлены с нашим методом-обработчиком.
Атрибуты @RequestParam :
Аннотация @RequestParam поддерживает использование нескольких атрибутов для удовлетворения различных общих потребностей:
1. имя / значение :
В только что рассмотренном примере мы заметим, что имена аргумента метода и параметра запроса были одинаковыми ( firstName и age ).
Однако иногда мы можем чувствовать необходимость иметь разные имена. Для этого мы будем использовать его атрибут name или value :
|
1
2
3
4
5
|
@GetMapping("/users")public List<User> getUsers(@RequestParam(name="uName") String firstName , @RequestParam("uAge") int age) { return userService.findUsersWith(firstName, age); } |
При этом параметры uName и uAge будут сопоставлены с аргументами метода firstName и age соответственно:
|
1
|
curl -XGET 'http://localhost:8080/users?uName=John&uAge=15' |
2. требуется :
По умолчанию, если мы определим параметр запроса и не передадим его в запросе пользователя, мы получим ошибку.
Чтобы избежать этого, мы можем установить для false значение false:
|
1
2
3
4
5
|
@GetMapping("/users") public List<User> getUsers(@RequestParam(required=false) String firstName , @RequestParam int age) { return userService.findUsersWith(firstName, age); } |
Он назначит тип данных по умолчанию всем необязательным параметрам. Когда мы нажимаем ниже URL:
|
1
|
http://localhost:8080/users?age=15 |
firstName будет сопоставлено с нулевым значением.
3. defaultValue :
Если мы хотим установить для false значение false и сопоставить значение по умолчанию с соответствующим атрибутом, мы получим:
|
1
2
3
4
5
|
@GetMapping("/users") public List<User> getUsers(@RequestParam(defaultValue="John") String firstName, @RequestParam int age) { return userService.findUsersWith(firstName, age); } |
Здесь, если мы не передадим параметр запроса firstName , он будет считаться «John» .
@RequestParam со списком Java:
Мы можем принять список параметров запроса в списке Java :
|
1
2
3
4
|
@GetMapping("/users/v2")public List<User> getUsersWithGivenAges(@RequestParam List<Integer> age) { return userService.findUsersWithAges(age);} |
Чтобы использовать наш новый пользовательский API, у нас будет что-то вроде:
|
1
2
3
4
5
|
curl -XGET 'http://localhost:8080/users/v2?age=10,15,20' Or curl -XGET 'http://localhost:8080/users/v2?age=10&age=15&age=20' |
Получить все параметры:
Чтобы извлечь все переданные параметры запроса из пользовательского запроса, мы примем их как карту Java:
|
1
2
3
4
5
6
|
@GetMapping("/paramsEx")public Map<String, String> printParams(@RequestParam Map<String, String> allQueryParams) { System.out.println(allQueryParams); return allQueryParams; } |
Это удобно, когда мы хотим получить все параметры, не зная их имен:
|
1
2
3
|
...{param1=A, param2=B, param3=2} |
Вывод:
Из этого руководства мы узнали, как работать с аннотацией @RequestParam в приложении Spring.
|
Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Spring @RequestParam Аннотация Мнения, высказанные участниками Java Code Geeks, являются их собственными. |