我正在尝试构建复杂的查询API。使用开放API自动生成模型类和控制器。在open 3中,查询参数中支持复杂对象。https://swagger.io/docs/specification/describing-parameters/#schema-vs-content。我希望医生有一些例子..。
我的公开阿皮:
parameters:
- in: query
name: filter
content:
application/json:
schema:
schema:
$ref: "#/components/schemas/ComplexFilter"
components:
schemas:
ComplexFilter:
type: object
properties:
name:
type: string
lastname:
type: string
userName:
type: string
生成控制器:
@RequestMapping(method = RequestMethod.GET, value = "/users")
@ResponseBody
public List<User> search( @Parameter(name = "page") @RequestParam(value = "page") Integer page,
@Parameter(name = "size") @RequestParam(value = "size") Integer size,
@Parameter(name = "filter") ComplexFilter filter
return service.filter(page,size,filter);
}
客户端应用程序,在我的示例中是脚本应用程序,由OpenAPI生成器使用生成器版本6.1.0自动生成,如下所示
public listUsers(page?: number, size?: number, filter?: ComplexFilter, options?: AxiosRequestConfig) {
return UsersApiFp(this.configuration).listUsers(page, size, filter, options).then((request) => request(this.axios, this.basePath));
}
现在的问题是:当我生成请求时,看起来
http://localhost:8085/api/v1/users?page=0&size=5&filter.name=test
但是spring (Server)期望查询参数没有“筛选器”。前缀
http://localhost:8085/api/v1/users?page=0&size=5&name=test
尝试在open中设置deepObject类型。没有运气
parameters:
- in: query
name: filter
content:
application/json:
schema:
schema:
$ref: "#/components/schemas/ComplexFilter"
style: deepObject
explode: true
发布于 2022-10-03 21:05:48
这里不需要content
关键字,它通常只在参数值是JSON字符串(例如filter={"key1":"value1","key2":"value2"}
)时使用。
相反,将schema
直接添加到参数,并使用style: form
+ explode: true
作为串行化方法
parameters:
- in: query
name: filter
schema:
$ref: "#/components/schemas/ComplexFilter"
# Exploded form is the default serialization method for query params,
# so these keywords can be omitted
style: form
explode: true
https://stackoverflow.com/questions/73940699
复制相似问题