Spring REST API с swagger - отображение значений в параметре запроса - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть приложение 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? Или это невозможно сделать с помощью чванства?

Любые предложения / мнения приветствуются!

1 Ответ

0 голосов
/ 23 января 2019

Это еще не поддерживается swagger-ui.Смотрите этот выпуск https://github.com/swagger-api/swagger-ui/issues/2241

...