首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenAPI3 json嵌套的对象复杂查询参数

OpenAPI3 json嵌套的对象复杂查询参数
EN

Stack Overflow用户
提问于 2022-10-03 20:50:34
回答 1查看 91关注 0票数 0

我正在尝试构建复杂的查询API。使用开放API自动生成模型类和控制器。在open 3中,查询参数中支持复杂对象。https://swagger.io/docs/specification/describing-parameters/#schema-vs-content。我希望医生有一些例子..。

我的公开阿皮:

代码语言:javascript
运行
复制
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

生成控制器:

代码语言:javascript
运行
复制
 @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自动生成,如下所示

代码语言:javascript
运行
复制
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));
    }

现在的问题是:当我生成请求时,看起来

代码语言:javascript
运行
复制
http://localhost:8085/api/v1/users?page=0&size=5&filter.name=test

但是spring (Server)期望查询参数没有“筛选器”。前缀

代码语言:javascript
运行
复制
http://localhost:8085/api/v1/users?page=0&size=5&name=test

尝试在open中设置deepObject类型。没有运气

代码语言:javascript
运行
复制
parameters:
  - in: query
    name: filter
    content:
      application/json:      
        schema:
          schema:
           $ref: "#/components/schemas/ComplexFilter"
          style: deepObject
          explode: true
EN

回答 1

Stack Overflow用户

发布于 2022-10-03 21:05:48

这里不需要content关键字,它通常只在参数值是JSON字符串(例如filter={"key1":"value1","key2":"value2"} )时使用。

相反,将schema直接添加到参数,并使用style: form + explode: true作为串行化方法

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73940699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档