【问题标题】:How to define enum values in array or enum as key in map property?如何将数组或枚举中的枚举值定义为映射属性中的键?
【发布时间】:2018-03-20 05:15:00
【问题描述】:

我正在使用 swagger-codegen-maven-plugin (2.2.1) 从 YML 配置生成 java 和 typescript 代码类文件。我有两个问题。

如何在 YML 中定义枚举属性数组?

如何在 YML 中将映射属性枚举定义为键和布尔值?

让我知道是否可行或有任何解决方法?目前,我在 java 和 typecrtipt 中定义了枚举类并将其作为字符串传递。谢谢。

DataInfo:
       type: object
       properties:
          enumTest:        -- works fine
            type: string
            enum:
              - one
              - two   
           enumTestArray:   --failing to generate code
              type: array
              items:
                 type: string
                 enum:
                  - one
                   -two  
              testMap:   -- works fines generate Map<String, Boolean> and { [key: string]: boolean; };
                type: object         
                additionalProperties:
                    type: boolean 

swagger enum doc

Map Property

更新:

与第一个问题有关:定义枚举属性数组。 swagger-codegen-maven-plugin 生成无效的java类文件如下: 生成和“字符的外观和问题。

@XmlType(name="List&lt;EnumTestArrayEnum&gt;")
@XmlEnum
public enum List&lt;EnumTestArrayEnum&gt; {

    ONE(List&lt;String&gt;.valueOf("&quot;one&quot;")), TWO(List&lt;String&gt;.valueOf("&quot;two&quot;"));


    private List&lt;String&gt; value;

    List&lt;EnumTestArrayEnum&gt; (List&lt;String&gt; v) {
        value = v;
    }

    public String value() {
        return value;
    }

    public static List&lt;EnumTestArrayEnum&gt; fromValue(String v) {
        return valueOf(v);
    }
}

【问题讨论】:

    标签: rest api yaml swagger-2.0 swagger-codegen


    【解决方案1】:

    如何在 YML 中定义枚举属性数组?

    您的enumTestArray 示例几乎是正确的——您只需要在“-”和“two”之间留一个空格即可使 YAML 有效:

               enumTestArray:
                  type: array
                  items:
                     type: string
                     enum:
                      - one
                      - two  # <----
    

    如何在 YML 中将映射属性枚举定义为键和布尔值?

    在 OpenAPI/Swagger 中,映射键是任意字符串,它是 not possible to limit the key names or format。您可以在description 中口头记录密钥格式。

    另外,由于键是已知的(仅限于某些已知的枚举),您可以将所有可能的键定义为可选属性。不优雅,但它可能适合你。

                  testMap:
                    type: object
                    properties:
                      one:
                        type: boolean
                      two:
                        type: boolean
                      ...
    

    还建议添加support for patternProperties,这将允许将键名限制为正则表达式。

    【讨论】:

    • enumTestArray 不起作用。格式化问题时我错过了空格。无法获取枚举属性数组。感谢您提供有关地图属性的建议。
    • enumTestArray 是定义枚举数组的正确方法。它究竟是如何不起作用的?您正在使用哪些工具,您获得了什么结果以及预期的结果是什么?
    • 我已经更新了这个问题,看起来像是 java 代码生成的问题。打字稿文件看起来不错。
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2016-12-13
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多