如何在没有手动滚动JsonDeserializer的情况下对Jackson中的复杂自定义枚举进行反序列化?

时间:2016-08-10 13:27:47

标签: java jackson deserialization

我有一个包含多个自定义属性的枚举。我能够序列化它,并且我已经创建了一个@JsonCreator方法来反序列化它,但它不起作用:

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.JsonNode;

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum SomeEnum {
    SOME_VALUE("Blah blah blah", "Example description");

    private final String displayName;
    private final String description;

    ScheduleOptimizationRuleCode(String displayName, String description) {
        this.displayName = displayName;
        this.description = description;
    }

    public String getCode() { return this.name(); }

    public String getDisplayName() {
        return displayName;
    }

    public String getDescription() {
        return description;
    }

    @JsonCreator
    public static SomeEnum fromString(@JsonProperty("code") String value) {
         return SomeEnum.valueOf(value);
    }
}

序列化时,我得到以下(正确的)输出:

{
  "code": "SOME_VALUE",
  "displayName": "Blah blah blah", 
  "description": "Example description"
}

反序列化时,我的理解是Jackson会查看我的JSON字符串的对象表示,挖出code属性,并将代码作为字符串传递给@JsonCreator带注释的方法{ {1}},但它不起作用。 fromString()始终为value

我也尝试在null注释上配置“模式”(例如@JsonCreatorPROPERTIES),但它不起作用。我见过的所有例子都只有一个值,所以不要有这个问题。

我知道我可以手动滚动DELEGATING并将其连接到......以及杰克逊文档中,但这肯定不是那么复杂,我需要一个手工制作的反序列化器......

如何使用多个属性反序列化枚举?

1 个答案:

答案 0 :(得分:1)

最后找到了一个example of deserializing an enum,尽管这两个例子中只有一个有效。从他的枚举看,我看到他正在JsonDeserializer。工作就像一个魅力!

JsonNode