Вступление:
Spring @RequestParam аннотация может использоваться для извлечения параметров запроса в методе обработчика. В этом кратком руководстве мы узнаем, как его использовать.
@RequestParam Аннотация:
Давайте сначала представим API, который возвращает список пользователей с указанным именем и возрастом:
1
2
3
4
5
6
7
8
|
@RestController public 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, являются их собственными. |