我有一个基于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完成?
任何建议/意见赞赏!