Статьи

Spring @RequestParam Аннотация

Вступление:

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
...
[{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 соответственно:

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, у нас будет что-то вроде:

Получить все параметры:

Чтобы извлечь все переданные параметры запроса из пользовательского запроса, мы примем их как карту 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, являются их собственными.