我有一个基于Spring Boot的REST API应用程序,带有以下 endpoints (写在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支持发送关键值对的动态映射,如here所示 .

我也使用Swagger来记录API定义,而且我使用swagger-codegen-cli生成客户端库,有人可以使用该API连接此REST API .

现在,问题是,我无法将swagger生成的客户端的值映射发送到Spring REST API(即使Spring支持它) . 从Swagger OpenAPI 3开始,他们在规范中添加了对Object类型的支持 . 但这种方式与我需要的方式不同 . 例如,只有Spring和RequestParam类型为Map

http://localhost:8080/search?foo=A&bar=B

被解析为键值对的映射

key="foo",value="A"
key="bar",value="B"

但是,当我从具有相同键值对的swagger客户端发送Map对象时

Map<String, String> values = new HashMap<>();
values.put("foo","A");
values.put("bar","B");
return out = clientApi.checkExistsUsingGET(values);

这将以REST的形式向REST API发送请求

http://localhost:8080/search?searchValues={foo=A,bar=B}

并且Spring方面的 Map 最终为

key="searchValues",value="{foo=A,bar=B}"

我一直在努力让swagger客户端api以一种Spring API旨在使用Map值的方式发送请求,但我无法找到解决方案 .

我是否以错误的方式使用客户端API?或者这不能用swagger完成?

任何建议/意见赞赏!