@n199a
Java

Почему GET запрос не попадает в метод с аннотацией @GetMapping с параметрами в Spring?

Имеется метод в контроллере, который обрабатывает GET запрос. Данный метод помечен аннотацией
@GetMapping(params = {ParameterName.SORT_BY, ParameterName.SORT_TYPE})
. У данного метода в аргументах с помощью аннотации @RequestParam идет привязка аргумента, пришедшего из GET запроса к переменной Java типа String. Выглядит это следующим образом:

@GetMapping(params = {ParameterName.SORT_BY, ParameterName.SORT_TYPE})
    public List<GiftCertificate> findAllAndSort(@RequestParam(value = ParameterName.SORT_BY) String sortBy,
                                                @RequestParam(value = ParameterName.SORT_TYPE, required = false) String sortType) {
        log.info("Sorting: {}, {}", sortBy, sortType);
        return service.findAllAndSort(sortType, sortBy);
    }


У аргумента sortType стоит required = false, что означает, что данный аргумент не обязательно должен присутствовать:
@RequestParam(value = ParameterName.SORT_TYPE, required = false) String sortType).


Тогда вопрос, почему при запросе вида:
-
http://localhost:8080/gift-certificates?sort_by=name&sort_type=DESC

запрос попадает в данный метод.
-
http://localhost:8080/gift-certificates?sort_by=name

не попадает в данный метод
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
BorLaze
@BorLaze
Java developer
Потому что params в @___Mapping предназначен для однозначной привязки запроса к методу.

То есть,
@GetMapping(params = {ParameterName.SORT_BY, ParameterName.SORT_TYPE})
вызовется ТОЛЬКО если оба параметра присутствуют в урле. Вне зависимости, указано required = false или нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы