当前位置: 首页 > 知识库问答 >
问题:

如何将数组中的枚举值或枚举定义为映射属性中的键?

扈高逸
2023-03-14

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

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

如何在YML中定义map属性枚举为key,布尔值为value?

让我知道这是可能的还是有任何解决办法?目前,我在java和typescrtipt中定义了enum类,并将其作为字符串传递。谢谢

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 codegen maven插件生成无效的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);
    }
}

共有1个答案

汪胡非
2023-03-14

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

您的enumTestArray示例几乎正确–您只需在“-”和“2”之间留出一个空格,即可使YAML有效:

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

如何在YML中定义map属性枚举为key,布尔值为value?

在OpenAPI/Swagger中,映射键是任意字符串,不可能限制键的名称或格式。您可以在description中口头记录密钥格式

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

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

还建议添加对模式属性的支持,这将允许将键名限制为正则表达式。

 类似资料:
  • 问题内容: 我正在寻找使用JPA映射枚举的不同方法。我特别想设置每个枚举项的整数值,并且只保存整数值。 一个简单的解决方案是将枚举注释与EnumType.ORDINAL一起使用: 但是在这种情况下,JPA映射枚举索引(0,1,2)而不是我想要的值(100,200,300)。 我发现的两个解决方案似乎并不简单… 第一个解决方案 这里提出的解决方案使用@PrePersist和@PostLoad将枚举转

  • 问题内容: 我已经阅读了Java和C++之间的枚举差异问题?但是我还是很困惑。 我想以下返回相关的字符串: 据我所读,这应该是可能的。只是希望您对如何实现它有所了解。 问题答案: 简短答案 您需要一个构造函数,一个字段和一个吸气剂。 建设者 枚举类型可以具有构造函数,只要它们的访问级别为私有或默认(包私有)即可。除了枚举声明本身之外,您不能直接调用这些构造函数。与类相似,当定义不带参数的枚举常量时

  • 问题内容: 我有以下枚举如何在jna中映射? 该枚举在结构上进一步引用。 阿卜杜勒·哈利克(Abdul Khaliq) 问题答案: 如果使用的是JNA,则可能要显式指定Java中的枚举值。默认情况下,Java的基本枚举类型并没有真正为您提供该功能,您必须为EnumSet添加一个构造函数(请参阅this和this)。 编码C枚举的一种简单方法是使用包装在与枚举同名的类中的公共静态最终const in

  • 问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi