我有一个包含多个自定义属性的枚举。我能够序列化它,并且我已经创建了一个@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
注释上配置“模式”(例如@JsonCreator
,PROPERTIES
),但它不起作用。我见过的所有例子都只有一个值,所以不要有这个问题。
我知道我可以手动滚动DELEGATING
并将其连接到......以及杰克逊文档中,但这肯定不是那么复杂,我需要一个手工制作的反序列化器......
如何使用多个属性反序列化枚举?
答案 0 :(得分:1)
最后找到了一个example of deserializing an enum,尽管这两个例子中只有一个有效。从他的枚举看,我看到他正在JsonDeserializer
。工作就像一个魅力!
JsonNode