- path один, различаются только наличием параметра. В коде контроллера это два метода, но в swagger-ui отображается только один из них.
@RestController
@RequestMapping("/api/countries")
.. class ..
// /api/countries
@io.swagger.annotations.ApiOperation("list all countries")
@GetMapping
public List<Country> findAll() {
return service.findAll();
}
// /api/countries?name=some
@ApiOperation("list countries filtered by name")
@GetMapping(params = "name")
public List<Country> findByName(@RequestParam String name) {
return service.findByName(name);
}
Гуглил всякое типа "swagger separate api by parameters". Пока нагулил только, что swagger так не умеет. Как бы тогда задизайнить?
Можно, конечно, в одном методе и сделать параметр required=false, но так, по-моему, хуже.
Картинко из swagger-ui.
Может оба метода на один метод повесить? Не знаю как на это отреагирует сваггер, но спринг справится
/api/countries/{name} как вариант PathParam или как там его
Не REST-API'шечно. Я же не одну county по name выбираю.
Ну тогда /api/countries/all :-)
Это выглядит, как корявый дизайн апи, почему это разные эндпоинты с точки зрения внешнего пользователя-то?
Чем это не один метод апи?
По аналогии со спринг датой - findAll без параметров, findByName с параметром name.
аналогия - не аргумент
просто findAll без параметров? прям все из базы вытащить? если по аналогии со spring data, то хотя бы Pageable параметр туда передавать нужно в случае со свагерром - хз. я до сих пор на старой версии 2.7.0 свагера сижу. мня устраивает, свои функции выполняет. новый чето не нравиться. возможно вам нужно выбрать какуюто стабильную версию
Просто findAll без параметров Есть и перегрузки с Examaple /Pageable и т д
Обсуждают сегодня