使用Spring可分页的OpenAPI生成器

eivnm1vs  于 2023-03-16  发布在  Spring
关注(0)|答案(2)|浏览(210)

我希望OpenAPI Generator(https://github.com/OpenAPITools/openapi-generator)能够根据Sping Boot Data中的实现在API中生成可分页参数。我一直在尝试找到一个合适的开箱即用的解决方案,但找不到。
理想情况下,此Pageable参数应按以下方式仅添加到GET方法:

default ResponseEntity<User> getUser(@ApiParam(value = "value",required=true) @PathVariable("id") Long id, **Pageable pageable**)

所以在我的控制器中实现这个接口后,我需要覆盖它,并使用前面提到的Pageable参数。我不想使用单独的参数来表示大小或页面,这里只使用这个Pageable。
感谢您的任何提示和帮助!

fae0ux8s

fae0ux8s1#

不幸的是,这不是最终的解决办法,但它是一半的方式。也许它是有帮助的无论如何。
通过将可分页参数(size,page等)定义为对象查询参数,可以告诉生成器使用Spring对象,而不是从API生成Pageable类。
分级:

openApiGenerate {
    ....
    importMappings = [
        'Pageable': 'org.springframework.data.domain.Pageable'
    ]
}

它告诉生成器使用Spring类,而不是API中定义的类:

openapi: 3.0.2
info:
  title: Spring Page/Pageable API
  version: 1.0.0

paths:
  /page:
    get:
      parameters:
        - in: query 
          name: pageable
          required: false
          schema:
            $ref: '#/components/schemas/Pageable'
      responses:
        ...

components:
  schemas:
    Pageable: 
      description: minimal Pageable query parameters
      type: object
      properties:
        page:
          type: integer
        size:
          type: integer

Map的问题是生成器仍然添加@RequestParam()注解,并且再次中断它。它仅在NOT注解时有效。
如果你有一点冒险精神,你可以试试openapi-processor-spring(我是作者),它确实能处理上面的例子,但它可能有其他你不喜欢的限制。

h79rfbju

h79rfbju2#

我有另一个解决方案,使用'openapi-generator',您可以在规范文件'x-spring-paginated'中给予一个vendorextension标志

info:
  title: Spring Page/Pageable API
  version: 1.0.0

paths:
  /page:
    get:
      x-spring-paginated: true
      responses:
        ...

您可能会遇到spring-doc的问题,您可以添加missig依赖项,也可以将configOptions下的documentation-provider更改为source。
用于maven插件的I.G.

...
<configuration>
  ...
  <configOptions>
   <documentationProvider>source</documentationProvider>
   ...
  </configOptions>
</configuration>

相关问题