1. 程式人生 > >MongoDB中物件反序列化的一個小問題

MongoDB中物件反序列化的一個小問題

今天在mongoDB存取物件資料的時候,碰到一個小問題:物件的某一個欄位型別是抽象類或者介面,在存入的時候沒有問題,但是在讀取的時候,由於沒有具體類的資訊,無法完成物件的重新構建,就會報錯:

Can not construct instance of com.bp.samples.json.generics.xxx, 
problem: abstract types either need to be mapped to concrete types, have custom 
deserializer, or be instantiated with additional type information
at [Source:xxxxx]
搜尋了一下,有一種方法是給父類加註解,標明繼承該父類的所有具體類的名字,網址:
http://blog.csdn.net/java_huashan/article/details/46428971

但是這種方法由一個侷限性,如果我的具體子類是可拓展的,那麼每次都要修改原始碼上面的註解。如果是父類是在框架裡,在jar包中,可能就不妥了。

經人指點,找到另一種比較好的方法,就是在http://wiki.fasterxml.com/JacksonPolymorphicDeserialization中提到的enableDefaultTyping一部分,在mongoDB客戶端初始化的時候objectMapper物件呼叫這個方法就可以做到重新構建抽象類宣告的成員變數。

像這樣:mapper = new ObjectMapper();
mapper.enableDefaultTyping();