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

用小写字母反序列化枚举-Java/Spring Boot

仲孙超
2023-03-14

我有一个具有这些属性的Project类

private String id;
private String name;
private ProjectStatus status;

Projectstatus是如下所示的枚举:

public enum ProjectStatus {
    I,
    A,
    C,
    OPEN,
    CLOSED
}

我正在调用一个远程rest服务,该服务用json响应,以获取有关该项目的信息。

我遇到的问题是,远程服务负载中的状态为“Open”,这会在尝试创建项目对象时引发问题,因为我的ProjectStatus枚举中的状态为Open(大写)。

我可以像这样创建Projectstatus以匹配来自服务的响应:

public enum ProjectStatus {
    I,
    A,
    C,
    Open,
    Closed
}

然而,我会违反命名枚举的标准。

我也尝试过做以下事情,但没有成功

public enum ProjectStatus {
    I,
    A,
    C,
    OPEN("Open"),
    CLOSED("Closed")
}

去这里的正确方法是什么?

共有2个答案

富辰阳
2023-03-14

我让它像这样工作

public enum ProjectStatus {
    I("I"),
    A("A"),
    C("C"),
    OPEN("Open"),
    CLOSED("Closed");

    private String value;

    ProjectStatus(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    @JsonCreator
    public static ProjectStatus fromString(String value) {
        return ProjectStatus.valueOf(value.toUpperCase());
    }
}
曹鹏海
2023-03-14

简单的解决方案是将Value定义为将通过@JsonValue注释进行序列化的内容。沿着这条线的东西

public enum MySuperEnum {
    VALUE_1("value1", "Value 1 Desc"),
    VALUE_2("valu2", "Value 2 Desc"),
    VALUE_3("value3", "Value 3 Desc")
    ;

    private final String code;
    private final String desc;

    MySuperEnum(String code, String desc){
        this.code = code;
        this.desc = desc;
    }

    @JsonValue
    public String getCode() {
        return code;
    }

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

  • 问题内容: 我们使用Jackson 1.9.1对与Java对象之间的JSON请求响应字符串进行序列化和反序列化。原始Java类型,集合类型和自定义对象都可以(反)序列化而不会出现问题。但是,尝试将JSON字符串反序列化为Java枚举时遇到问题。JSON字符串的序列化方式如下: wt的Java类型如下所示: 我在SO上提到了this,this和this,并提出了重量单位的枚举,如下所示: 问题是,每

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

  • 问题内容: 我在Android上的Java中具有以下枚举,并且我希望能够将传入的JSON字符串/对象中的整数反序列化为此Enum类型。我一直在Jackson和GSON上受到欢迎,但在我正在使用的JSON.org包上却什么也没有。 有没有简单的方法可以做到这一点,或者我需要更改JSON解码器?谢谢。 问题答案: 将返回您的数组,然后可以遍历数组并检查

  • 我在Android上的Java中有以下枚举,我希望能够将传入的JSON字符串/对象中的整数反序列化为该枚举类型。我在杰克逊和GSON上得到了点击,但在json.org包上没有,我正在使用。 是否有一个简单的方法来做到这一点,或者我需要改变JSON解码器?谢了。

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