标签: openapi-generator

安全性未从 Open API 生成器添加到 Swagger

我正在团队中开发一个新项目,我们正在遵循 API 优先方法来实现 API。我们使用openapi-generator-maven-pluginOpenAPI 3.0.3 格式的 yml 文件生成 API。为了生成 swagger 文件,我们使用 springfox 2.9.2。我面临的问题是当我尝试为请求增加安全性时。

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
security:
  - bearerAuth: [ ]
Run Code Online (Sandbox Code Playgroud)

Authorize按钮不会出现在 swagger 页面中,仅出现请求附近的锁,但它不会执行任何操作(见下图)。

我观察到,如果我打开/v2/api-docsswagger json 不包含安全定义部分。

我设法添加安全性的唯一方法是通过 Docket 对象中的代码添加安全部分,如下所示:

new Docket(DocumentationType.SWAGGER_2)
    .securityContexts(Collections.singletonList(securityContext()))
    .securitySchemes(Collections.singletonList(bearerJwtKey()))
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.example"))
    .paths(PathSelectors.any())
    .build();
Run Code Online (Sandbox Code Playgroud)

这是为 Swagger UI 添加安全性的唯一方法还是我遗漏了什么?

在此输入图像描述

swagger spring-boot openapi openapi-generator

6
推荐指数
1
解决办法
4539
查看次数

多部分请求的 OpenAPI-Generator 实现不适用于多文件上传

我们使用 OpenAPI 3.0.0 架构构建 API,并生成用于应用程序前端部分的打字稿代码。我们定义了一个端点,它应该能够使用多个文件并将它们上传到后端。这是端点的 requestbody 的样子:

requestBody:
  content:
    multipart/form-data:
      schema:
        properties:
          images:
            type: array
            items:
              type: string
              format: binary
        required:
          - images
Run Code Online (Sandbox Code Playgroud)

在有关文件上传的 OpenAPI 网页以及 Stackoverflow 上的多个帖子中也找到了类似的定义。

生成 API 时,images预计类型为Array<Blob>。当文件输入元素的输入在前端发生更改时,将调用端点。更具体地说,端点的调用方式如下:

const onInputChange = useCallback(() => {
  const files = inputRef.current.files; // React.useRef that's passed in as ref for the html input-element
  uploadImages(Array.from(files)); // uploadImages is the function that calls the endpoint
}, [inputRef, api]);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,API 验证始终返回状态代码为 400 - 错误请求的 HTTP 响应。查看 OpenAPI 生成器生成的实现,-propertyimages …

multifile-uploader swagger typescript openapi openapi-generator

6
推荐指数
0
解决办法
1876
查看次数

如何使用 openapi-generator-maven-plugin 实现继承

我正在尝试生成具有继承的 Java 模型(Open API 2.0)。问题与此类似:如何让maven swagger codegen插件使用继承生成Java类?

我想实现没有鉴别器属性的继承。为什么这个字段必须在父类中指向?此外根据文档:

鉴别器固定字段必须引用同一架构中的属性,并且它必须是必需的属性

我不想指出任何必填字段。我只是想获得遗产。还有其他方法可以做到这一点吗?我知道一些“解决方法”是改变属性级别:

"Child": {
  "allOf": [
    {"$ref": "#/components/schemas/Parent"},
  ],
  "properties": {.......}
}
Run Code Online (Sandbox Code Playgroud)

但这相当不符合规范。最令人惊讶的部分是它适用于 openapi-generator-maven-plugin,但此时如果我们放入“必需”列表,则不会生成正确的代码。必填字段列表将被省略,但继承将正确生成。

有没有其他方法可以在没有歧视器的情况下生成正确的继承?

java openapi-generator

6
推荐指数
0
解决办法
1408
查看次数

使用 oneOf 时未生成 OpenAPI 模型

我正在使用带有 Spring Boot 的 OpenAPI+OpenAPI-generator,并尝试使用oneof如下架构:

这是 requests.yaml 文件中的配置:

...

requestBody:
 name: request
 required: true
 content:
   application/json:
     schema:
       oneOf:
         - $ref: 'components.yaml#/Request'
         - $ref: 'components.yaml#/ComplexRequest'

...
Run Code Online (Sandbox Code Playgroud)

这是 Components.yaml 文件中的相关配置:

Request:
  allOf:
    - $ref: '#/BaseInfo'
    - type: object
      properties:
        should_create:
          type: boolean
          enum: [ false ]
        reference_id:
          type: string
        required:
          - reference_id

ComplexRequest:
  allOf:
    - $ref: '#/BaseInfo'
    - type: object
      properties:
        should_create:
          type: boolean
          enum: [ true ]
        create_data:
          $ref: '#/Reference'
      required:
        - create_data

BaseInfo:
  type: object
  properties:
    customer_id:
      type: …
Run Code Online (Sandbox Code Playgroud)

polymorphism swagger openapi openapi-generator

6
推荐指数
1
解决办法
1万
查看次数

具有多个值的 OpenApi 枚举

我是 OpenApi 新手,想使用 api.yaml (OpenApi 版本 3.0.1)定义我的 api。我的问题是生成的枚举仅包含名称而不包含值。

这是我的代码中的枚举:

    TEST1(1, "Test 1", "T1"),
    TEST2(2, "Test 2", "T2"),
    TEST3(3, "Test 3", "T2");
Run Code Online (Sandbox Code Playgroud)

这是使用 OpenApi 生成后的枚举:

    TEST1("TEST1"),
    TEST2("TEST2"),
    TEST3("TEST3");
Run Code Online (Sandbox Code Playgroud)

枚举自动定义如下:

        testenum:
          type: string
          description: desciption of the enum
          enum:
            - TEST1
            - TEST2
            - TEST3
Run Code Online (Sandbox Code Playgroud)

如何在 api.yaml 中定义枚举以使其看起来像第一个示例?

java enums openapi openapi-generator openapi-generator-maven-plugin

6
推荐指数
1
解决办法
5287
查看次数

OpenAPI 规范:忽略查询参数的默认值

我将 OpenAPI 3 规范中的参数描述为

review_requests:
  get:
    tags:
      - dashboard
    operationId: reviewRequests
    parameters:
      - name: page
        in: query
        default: 0
        description: Page number
        schema:
          type: integer
    responses:
      200:
        description: OK
Run Code Online (Sandbox Code Playgroud)

编译后,我发现 Java 代码中缺少默认值,并且参数实际上描述如下:

@Valid @RequestParam(value = "page", required = false) Integer page
Run Code Online (Sandbox Code Playgroud)

如果 GET 请求中未提供参数,则0我不会收到。null据我了解应该是

@Valid @RequestParam(value = "page", required = false, defaultValue = "0") Integer page
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我做错了什么?

swagger openapi openapi-generator

6
推荐指数
1
解决办法
7953
查看次数

Spring Boot:OpenApi 生成器插件创建不需要的测试文件

我使用 OpenApi 3.0 和 maven 插件openapi-generator-maven-plugin来生成我的 api + 对象。

这是我的 Maven 配置:

                    <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/BookingService.yaml</inputSpec>
                        <generatorName>spring</generatorName>
                        <modelPackage>${clientPackage}.model</modelPackage>
                        <invokerPackage>${clientPackage}.invoker</invokerPackage>
                        <apiPackage>${clientPackage}.api</apiPackage>
                        <generateApis>true</generateApis>
                        <generateApiTests>false</generateApiTests>
                        <generateModelTests>false</generateModelTests>
                        <configOptions>
                            <delegatePattern>true</delegatePattern>
                        </configOptions>
                    </configuration>
                </execution>
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但它也会生成我不想要的测试。正如您在我的配置中看到的,我禁用了 Api 测试 + 模型测试的测试。

在此输入图像描述

这些测试的编译失败,因为构建目标文件夹中的“无法解析符号‘SpringBootTest’”...

这些测试没有任何意义,我该如何禁用它们?

maven spring-boot openapi openapi-generator

6
推荐指数
1
解决办法
4072
查看次数

使用 openapi-generator 生成客户端时如何覆盖服务器 -&gt; url (basepath)?

我有一个包含以下代码段的 OpenAPI 规范文档(我无法控制):

servers:
  - url: http://www.[someservice].com/api
Run Code Online (Sandbox Code Playgroud)

我正在使用这个 OpenAPI 文档来生成我在我的 Angular SPA 中使用的 typescript-angular 客户端。当我在生产中运行它时,这很好用(我的 api 后端可以通过提供的 url 访问)。

我想使用http://localhost:1234/api进行本地测试。如何使用 openapi-generator 覆盖基本路径,以便我可以生成在本地工作的客户端代码?

openapi-generator

5
推荐指数
2
解决办法
626
查看次数

升级到 Angular 11 后,必须从注入上下文中调用“inject()”

升级到 Angular 11 后,我无法再访问ng serve我的 Web 应用程序。

我正在使用 Spring Doc 和最新的 OpenAPI 生成器 gradle-plutin (5.0.0) 生成客户端。

该问题似乎与我的(生成的)REST 客户端有关。打开 https://localhost:4200 会将以下内容写入控制台:

main.ts:12 Error: inject() must be called from an injection context
    at injectInjectorOnly (core.js:4901) [angular]
    at Module.??inject (core.js:4911) [angular]
    at Object.ApiModule_Factory [as factory] (meditation-rest-client.js:2885) [angular]
    at R3Injector.hydrate (core.js:11158) [angular]
    at R3Injector.get (core.js:10979) [angular]
    at :4200/vendor.js:82591:55 [angular]
    at Set.forEach (<anonymous>) [angular]
    at R3Injector._resolveInjectorDefTypes (core.js:11016) [angular]
    at new NgModuleRef$1 (core.js:25046) [angular]
    at NgModuleFactory$1.create (core.js:25100) [angular]
    at :4200/vendor.js:100468:45 [angular]
    at Object.onInvoke (core.js:28301) …
Run Code Online (Sandbox Code Playgroud)

openapi angular openapi-generator springdoc

5
推荐指数
2
解决办法
1570
查看次数

如何让 OpenApi Generator 正确转换 Dictionary&lt;int, string&gt;?

现在我的 Api 返回一个模型,其中包含一个Dictionary<int, string>属性:

public Dictionary<int, string> Subdivisions { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我运行 OpenApi Generator 时,输出类有

public Dictionary<string, string> Subdivisions { get; set; }
Run Code Online (Sandbox Code Playgroud)

我知道 JSON 规范不允许整数键,但这确实搞砸了那些期待 <int, string> 的 API 消费者。

我能做些什么来确保我的输出类有Dictionary<int, string>而不是Dictionary<string, string>

c# swagger openapi openapi-generator

5
推荐指数
1
解决办法
421
查看次数