Как в 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 метода в контроллере:
- Который выводи список всех сотрудников
- Который принимает в себя 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);
}
}