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

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

南门新荣
2023-03-14

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

public enum CloudType {
    AZURE, OPENSTACK
}

还有一个班-

public class Env{
   private CloudType cloudType;
}

在杰克逊解析期间,如果我给 -

{
  "cloudType":"AZURE"
}

或者

{
  "cloudType":"azure"
}

它会给我一个带有cloudType=AZUREEnv对象

有一个线程(杰克逊数据库枚举不区分大小写),但我们真的需要做这么多吗?或者

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

够了吗?

共有1个答案

孔厉刚
2023-03-14

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

您应该将@JsonValue-annotated方法添加到您的枚举CloudType中,以告诉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;
    }
}

然后Jackson会序列化< code>CloudType。AZURE转换为< code >“AZURE”,< br >并将< code >“AZURE”反序列化为< code>CloudType。AZURE。

 类似资料:
  • 我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?

  • 如何用gson 2.2.4序列化和反序列化像这样的简单枚举?

  • 问题内容: 我正在尝试并且未能对Jackson 2.5.4的枚举进行反序列化,并且我不太清楚我的情况。我的输入字符串是驼峰式的,我想简单地映射到标准的Enum约定。 我也尝试了吸气剂,但没有成功,这是我在其他地方看到的一种选择。他们都炸毁了: 我究竟做错了什么? 问题答案: 编辑: 从Jackson 2.6开始,您可以在枚举的每个元素上使用以指定其序列化/反序列化值(请参见此处): (此答案的其余

  • 我正在尝试使用jackson-DataBind Objectmapper反序列化一个JSON字符串,其中包含一组枚举属性。当JSON中出现未在枚举中定义的未知属性时,就会发生这种情况。请在下面找到我正在使用的对象映射器配置。 但是,反序列化(ObjectMapper.ReadValue(jsonText,.class);)抛出此错误。“test”是要反序列化的JSON字符串中的未知属性。 Com.

  • 问题内容: 我如何使用gson 2.2.4序列化和反序列化一个简单的枚举? 问题答案: 根据 GsonAPI文档 ,Gson提供了的默认序列化/反序列化,因此基本上,应使用标准和方法(与其他类型一样)对序列化和反序列化。

  • 问题内容: 我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@JsonValue,这似乎可以将对象序列化为: 但是当我尝试反序列化时,我得到了 我在这里想念什么? 问题答案: 如果你希望将枚举类与其JSON表示完全脱钩,则@xbakesx指出的序列化器/反序列化器解决方案是一个很好的解决方案。 另外,如果你喜欢一个独立的解决方案,则基于·和·注释的实现会更方便。 因