Фильтры в GET запросе

Как лучше всего реализовать фильтры в GET запросе?

Допустим есть метод,который получает пользователя с id равным 1: /user?id=1

Если нужно обрабатывать множество подобных фильтров /user?id=1&name=Ivan&... и не обязательно все будут использоваться. Как лучше всего реализовать обработку?

@RequestMapping(value = "/user/", method = "RequestMethod.GET")
public String getUser(@RequestParam("name", required=false) String name) {
    // ...
}

Ответы (2 шт):

Автор решения: Aziz Umarov

Вообще существует 3 способа передачи параметров запроса.

  • в URL path

  • Request Header

  • Request Body

Для Get запроса доступны лишь 1 - 2 в силу отсутствия Body. Использовать 1 или 2 для не больших параметров (до 2048 символов в совокупности) кому как нравится. Если нужно больше, то вариант 2 и тот с оговоркой на используемые сервера

  • Apache 2.0, 2.2: 8K
  • nginx: 4K - 8K
  • IIS: в зависимости от версии, 8K - 16K
→ Ссылка
Автор решения: Artur Vartanyan

Controller:

// Вывод Заказчика по ID
    @GetMapping("/customer/{id}")
    Customer getCustomer(@PathVariable Long id) {
        return adminService.getCustomer(id);
    }

Service:

// Вывод Заказчика по ID
    public Customer getCustomer(Long id) {
        return customerRepository.getByIdAndUserRole(id, User.ROLE_CUSTOMER).orElseThrow(() -> new MainNotFound(id));
    }
→ Ссылка