我想將JSON映射到POJO。 JSON格式爲:將Json轉換爲Java包含類型變量(某些子類)的對象
{
user: "123abc",
messages: [
{"type":"A", "args": {"a":"str", "b":0} },
{"type":"B", "args": {"c":true, "d":false} },
...
]
}
每種類型的消息都有其自己的預期參數。例如:
class TypeAMessage extends Message {
String a;
int b;
}
class TypeBMessage extends Message {
boolean c;
boolean d;
}
我會這樣JSON映射到一個簡單的POJO,如:
class Messages {
@JsonProperty("user")
String user;
@JsonProperty("messageList")
List<Message> messageList;
class Message {
@JsonProperty("type")
String type;
@JsonProperty("args")
Map<String, Object> args;
}
}
但這似乎並不理想,因爲args
可以包含多個變量類型(字符串,整數,.. 。),現在它們都被存儲爲一般Object
變量。
我已經知道基於消息type
的預期結果。由於每個type
預計一組不同的參數,我認爲JSON映射到這樣的一類:
class Messages {
@JsonProperty("user")
String user;
@JsonProperty("messageList")
List<? extends Message> messageList;
class Message {}
class TypeAMessage extends Message {
@JsonProperty("a")
String a;
@JsonProperty("b")
int b;
}
class TypeBMessage extends Message {
@JsonProperty("c")
boolean c;
@JsonProperty("d")
boolean d;
}
}
我使用傑克遜JSON和JSON到對象的轉換失敗,Unrecognized field "a"
(和b, c,d)),因爲這些字段不在父類Message
類中。
我該怎麼做呢?或者是否有辦法通過告訴JSON對象映射器尋找子映射到每個消息子對象?
[Json deserial使用傑克遜化成另一個類層次結構](http://stackoverflow.com/questions/10329706/json-deserialization-into-another-class-hierarchy-using-jackson) –
@mlk感謝您的鏈接。我通過鏈接內容(和鏈接的鏈接內容)挖掘並找到解決方案。解決方案只是在問題中編寫的幾行內容之上,而且看起來比鏈接中提出的要簡單。所以我認爲這個問題是公開的並且自己回答是有幫助的。如果你不反對,我會繼續。 – Aaron