Как в Spring Boot в методе контроллера использовать Map?

В официальной документации по Spring Boot Web MVC сказано, что:

Когда аннотация @RequestParam объявляется как Map<String, String> или MultiValueMap<String, String> без имени параметра, указанного в аннотации, Map заполняется значениями параметра запроса для каждого заданного имени параметра.

В общем виде GET метод контроллера, принимающий Map будет выглядеть следующим образом:

@GetMapping
public Set<Employee> findAll(@RequestParam Map<String, String> params) {
    // ... some code here ....
}

Всем известно, что при создании REST API рекомендуется придерживаться общепринятых стандартов в области маппинга HTTP запросов, поэтому метод, который будет получать все объекты, например найти всех сотрудников, должен выглядеть следующим образом:

@GetMapping
public Set<Employee> findAll() {
    return service.findAll();
}

Тогда вопрос. Почему при добавлении вышеперечисленных методов одновременно в контроллере будет вызывать исключение:

Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'ApplicationController' method com.some-company.prj.controller.ApplicationController#findAll(Map)

Как этого избежать? Мне нужно 2 метода в контроллере:

  1. Который выводи список всех сотрудников
  2. Который принимает в себя GET запрос вида ?ключ=значение&ключ=значение:
http://localhost:8080/employees?sort_by=name&order_by=ASC&sort_by=department&order_by=DESC

Что я предпринимал

Можно оставить один метод, который принимает в себя Map и внутри уже проверять Map на null:

```java
@GetMapping
public Set<Employee> findAll(@RequestParam Map<String, String> params) {
    if(params == null) {
        return service.findAll();
    } else {
        return service.findAll(params);
    }
}

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