Как проверить имя параметра GET запроса в Sping?
Для маппинга GET запроса использую аннотацию @GetMapping:
@GetMapping(params = {ParameterName.SORT_BY})
public List<GiftCertificate> findAllSorted(@RequestParam(value = ParameterName.SORT_BY) Set<ColumnName> columnNames) {
return service.findAllSorted(columnNames);
}
ParameterName.SORT_BY - это обычный enum.
По запросу:
http://localhost:8080/gift-certificates?sort_by=name
я попадаю в данный метод, всё нормально. Но почему при указании параметра ``, которого не существует в маппинге, по запросу:
http://localhost:8080/gift-certificates?sort_ABRAKADABRA_by=name
Я попадаю в данный метод:
@GetMapping
public List<GiftCertificate> findAll() {
return service.findAll();
}
Почему и как сделать проверку параметров GET запроса?
P.S. Вот это уровень, когда минусатор боится объявиться в комментариях и тыкают наугад причину закрытия вопроса, потому что подходящей не существует. Это ж как должно бомбить пуканы :)
Ответы (1 шт):
Если просто проверить параметры
Первое что пришло мне в голову пришло, это проверять запрос на возможные параметры примерно так:
@GetMapping
public List<GiftCertificate> findAll(HttpServletRequest request) {
if (!request.getParameterMap().isEmpty())
return; // Любое действие, если параметры есть
return service.findAll();
}
Вариант с опциональными параметрами
В вашем случае напрашивается другой способ решения - сделать эндпоинт со всеми возможными параметрами и обрабатывать их наличие или отсутствие. Небольшой примерчик:
@GetMapping()
public List<GiftCertificate> findAllSorted(
@RequestParam(value = "foo", required = false) Optional<String> nonRequiredFoo,
@RequestParam(value = "bar") String requiredBar) {
if (nonRequiredFoo.isPresent()){
return service.findAllSorted(columnNames);
}
return service.findAll();
}
Ссылочка на почитать: https://www.baeldung.com/spring-request-param