![](/img/trans.png)
[英]How to serialize and deserialize Java Enums as JSON objects with Jackson
[英]Jackson - Serialize / Deserialize Enums with Integer fields
這里有一個非常相似的問題 - 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和反序列化,一個static
與方法@JsonCreator
如下面提供可以接受參數的int。
以下代碼供參考:
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 庫上的一個開放錯誤 - https://github.com/FasterXML/jackson-databind/issues/1850
我在使用其他解決方案時遇到了問題。 這對我有用(傑克遜 2.9.9):
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
enum State{
GOOD(1), BAD(-1), UGLY(0);
int id;
State(int id) {
this.id = id;
}
@JsonValue
int getId() { return id; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.