У меня есть приложение REST API на основе Spring Boot со следующей конечной точкой (написано на Kotlin)
@RequestMapping(value = ["/search"], method = [RequestMethod.GET])
@ApiOperation("Check whether any of the map values exists. Returns string 'true' if stamp exists, else 'false'")
fun checkExists(
@ApiParam("information about the stamp as key-value pairs (example: ds=2017-11-34&hh=05)", required = true)
@RequestParam searchValues: Map<String, String>
): Boolean {
return service.checkExists(searchValues)
}
И я знаю, что Spring поддерживает отправку динамической карты пар ключ-значение, как описано здесь .
Я также использую Swagger для документирования определений API и, более того, я использую swagger-codegen-cli для создания клиентской библиотеки, с помощью которой кто-то может соединиться с этим REST API.
Теперь проблема в том, что я не могу отправить карту значений из сгенерированного клиента swagger в Spring REST API (даже если Spring поддерживает его). Начиная с Swagger OpenAPI 3, они добавили поддержку типов объектов в спецификации. Но это работает не так, как мне нужно. Например, только с Spring и RequestParam типа Map
http://localhost:8080/search?foo=A&bar=B
анализируется как карта пар ключ-значение
key="foo",value="A"
key="bar",value="B"
Но, когда я отправляю объект карты из свагер-клиента с теми же парами ключ-значение
Map<String, String> values = new HashMap<>();
values.put("foo","A");
values.put("bar","B");
return out = clientApi.checkExistsUsingGET(values);
Отправляет запрос в REST API в виде
http://localhost:8080/search?searchValues={foo=A,bar=B}
и карта на стороне весны заканчивается как
key="searchValues",value="{foo=A,bar=B}"
Я изо всех сил пытался заставить клиентский API swagger отправлять запрос так, чтобы Spring API предназначался для работы с картой значений, но я не могу найти решение.
Я неправильно использую клиентский API? Или это невозможно сделать с помощью чванства?
Любые предложения / мнения приветствуются!