【问题标题】:Why does Swagger Codegen convert an ON/OFF string enum to TRUE/FALSE?为什么 Swagger Codegen 将 ON/OFF 字符串枚举转换为 TRUE/FALSE?
【发布时间】:2020-04-11 13:34:06
【问题描述】:

我正在使用 Swagger Codegen 3.0.19,也尝试过 OpenAPI Generator 4.0.3。

Java 环境:

Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

跑步者:

java -jar ./libs/openapi-generator-cli-4.3.0.jar  generate \
       -i pet.yaml \
       -g spring \
       -o ./OUTPUT/api/

这是我的 OpenAPI 架构:

openapi: "3.0.0"
....
CaptureStatus:
  type: object
  description: Holds current capture status.
  properties:
    status:
      type: string
      enum:
        - ON
        - OFF
      description: Capture status values.
....

输出是:

  ....
  public enum StatusEnum {
    TRUE("true"),

    FALSE("false");

    private String value;

    StatusEnum(String value) {
      this.value = value;
    }
  ....

为什么 codegen 将 ON/OFF 枚举转换为 TRUE/FALSE?当我使用 Swagger Editor GUI 生成时它不会这样做。

【问题讨论】:

    标签: yaml openapi swagger-codegen openapi-generator


    【解决方案1】:

    在 YAML 1.1 中,onoffynyesnoboolean values。这是 YAML 1.2 中的 changed,此版本不再将这些值视为布尔值。

    看起来 Swagger Codegen 和 OpenAPI Generator 使用 YAML 1.1 解析器。在这种情况下,您需要将'ON''OFF' 括在引号中以将它们视为字符串:

          enum:
            - 'ON'
            - 'OFF'
    

    【讨论】:

    • 它可以工作,但仍然很好奇为什么它可以在 swagger 编辑器 gui 中而不是在命令行中工作。无论如何,我现在有足够的继续。谢谢。
    • Swagger Editor 在将 YAML 发送到 codegen 之前将其转换为 JSON。编辑器使用 YAML 1.2 解析器,因此它将 enum: [ON, OFF] 转换为 "enum": ["ON", "OFF"](即字符串枚举,而不是布尔枚举),而无需在原始值中添加引号。这就是编辑器的代码生成产生正确结果的原因。
    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2015-06-10
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多