【发布时间】:2018-07-31 18:12:17
【问题描述】:
这里有一个非常相似的问题 - Jackson: Serialize and deserialize enum values as integers 处理使用 Jackson 序列化和反序列化枚举,其解决方案非常简单,使用 @JsonValue 注释。
如果我们有一个带有如下整数字段的枚举,这将不起作用。
enum State{
GOOD(1), BAD(-1), UGLY(0);
int id;
State(int id) {
this.id = id;
}
}
如果我们的要求是序列化并提供实际值而不是name()。比如说,{"name":"foo","state":1} 之类的东西代表 GOOD for foo。添加@JsonValue 注释仅在序列化和反序列化失败的情况下才有帮助。如果我们没有字段,这意味着 GOOD=0、BAD=1、UGLY=2、@JsonValue 就足够了,并且当字段存在时,Jackson 无法反序列化 - 0 和 1 映射错误,-1 出现异常。
【问题讨论】: