gpt4 book ai didi

java - Jackson - 使用整数字段序列化/反序列化枚举

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:20:42 25 4
gpt4 key购买 nike

这里有一个非常相似的问题 - 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} 这样的东西代表 foo 的 GOOD。添加 @JsonValue 注释仅在序列化的情况下有帮助,反序列化失败。如果我们没有字段,这意味着 GOOD=0、BAD=1、UGLY=2、@JsonValue 就足够了,并且当字段存在时 Jackson 无法反序列化 - 0 和 1 的错误映射以及异常对于 -1。

最佳答案

这可以使用 Jackson 注释 @JsonCreator 来实现。对于序列化,带有 @JsonValue 的方法可以返回一个 int,对于反序列化,带有 @JsonCreatorstatic 方法可以接受一个 int in 参数作为下面提供。

以下代码供引用:

enum State{
GOOD(1), BAD(-1), UGLY(0);

int id;

State(int id) {
this.id = id;
}

@JsonValue
int getId() {
return id;
}

@JsonCreator
static State fromId(int id){
return Stream.of(State.values()).filter(state -> state.id == id).findFirst().get();
}

}

注意:目前这是 Jackson 库上的一个 Unresolved 错误 - https://github.com/FasterXML/jackson-databind/issues/1850

关于java - Jackson - 使用整数字段序列化/反序列化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48901241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com