使用 jsonschema2pojo 转换可变长度值的枚举

Converting enum of variable length values using jsonschema2pojo

我正在尝试为相应的 Java 可变长度值 枚举创建 json schema。资料如下:

JSON 尝试过:

"Info": {
      "type": "string",
      "enum": [
        "TITLE",
        "ADDRESS",
        "NAME";
      ]
     }

但这不会提供所需的输出,而是转换后的 java class 我得到的是

当前输出:

public static enum Info {
        TITLE("TITLE"),
        ADDRESS("ADDRESS"),
        NAME("NAME");
}

需要Java输出:

public enum Info {
    TITLE(45),
    ADDRESS(100),
    NAME(45);

    private Integer maxLength;

    Info(Integer maxLength) {
        this.maxLength = maxLength;
    }

    public Integer getMaxLength() {
        return maxLength;
    }
}

无法找到解决此问题的方法。非常感谢任何帮助。

据我所知目前这是不可能的。如果您查看源代码,那么枚举是由 org.jsonschema2pojo.rules.enumRule 生成的。 jsonschema2pojo 为每个枚举提供一个构造函数,对于您的用例,它需要采用一个 Integer 类型的参数。构造函数在line 199中通过以下代码生成

JVar valueParam = constructor.param(String.class, VALUE_FIELD_NAME);

也就是说,构造函数被硬编码为始终采用 String 类型的单个参数。

您可能做的最好的事情是使用 javaEnumNames 属性,它允许您指定枚举的名称和值(限制值始终是字符串)。

 {
  "javaEnumNames" : [
     "TITLE",
     "ADDRESS",
     "NAME"
  ],
  "enum" : [ 45, 100, 45 ]        
 }

这个 JSON 片段产生

...
TITLE("45"),
ADDRESS("100"),
NAME("45");
...