【问题标题】:Converting enum of variable length values using jsonschema2pojo使用 jsonschema2pojo 转换可变长度值的枚举
【发布时间】:2016-09-28 09:54:49
【问题描述】:

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

JSON 试过了:

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

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

当前输出:

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;
    }
}

无法找到解决此问题的方法。将不胜感激。

【问题讨论】:

  • 你确定你的json是正确的吗?
  • @cihanseven : JSON 是正确的,这就是它转换为当前输出的原因,但我需要更改它以获得所需的输出。

标签: java json enums jsonschema jsonschema2pojo


【解决方案1】:

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

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

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

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

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

这个 JSON sn-p 产生

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

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2015-08-29
    • 2014-03-28
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多