枚举,如何在(反)序列化期间重命名?

时间:2018-04-24 10:46:15

标签: java jackson

您可以在Java中更改ENUM的名称吗? 例如,我有枚举 -

public enum CloudType {
    AZURE, OPENSTACK
}

一个班级 -

public class Env{
   private CloudType cloudType;
}

在JACKSON解析期间,如果我给 -

{
  "cloudType":"AZURE"
}

{
  "cloudType":"azure"
}

它会给我一个Env对象cloudType=AZURE

有一个线程(Jackson databind enum case insensitive),但我们真的需要这么做吗? 或者

@XmlEnumValue("azure")
    AZURE("azure"),

就够了吗?

1 个答案:

答案 0 :(得分:1)

您可以将enum实例的Java名称与其JSON表示形式分离。

您应该向enum CloudType添加@JsonValue - 带注释的方法,告诉Jackson在读/写JSON时要使用哪个值。 为此,您还需要一个构造函数来初始化此值。

像这样:

public enum CloudType {
    AZURE("azure"),
    OPENSTACK("openstack");

    private final String value;

    private CloudType(String value) {
        this.value = value;
    }

    @JsonValue
    public String getValue() {
        return value;
    }
}

然后杰克逊会将CloudType.AZURE序列化为"azure"
并将"azure"反序列化为CloudType.AZURE