[英]Cannot de-serialize JSon collection of polymorphic types
我有一個非常煩人的問題,請看一下代碼:
ObjectMapper mapper = new ObjectMapper();
List<Message> messageList = new ArrayList<Message>();
messageList.add(new RoomTextMessage(1,"2","22",1));
messageList.add(new PresenceMessage(1,1,2, UserStatus.OFFLINE));
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
String s = mapper.writeValueAsString(messageList);
mapper.convertValue(s,???)
RoomTextMessage和PresenceMessage擴展了Message。
所以當我在writeValueAsString之后打印出s時,這就是我得到的:
[["com.delver.chateau.message.RoomTextMessage",{"text":"22","roomId":"2","userId":1,"sequence":1}],["com.delver.chateau.message.PresenceMessage",{"friendId":2,"status":"OFFLINE","userId":1,"sequence":1}]]
我不知道如何將其轉換回arrayList,我幾乎擁有ObjectMapper擁有的每個API。
一點幫助將不勝感激。
由於Java Type Erasure,無法指定要綁定的通用類型。 為了傳遞完整的泛型類型信息以將JSON綁定到List,您必須使用采用TypeReference或JavaType的方法,如下所示:
List<Message> result = mapper.readValue(s, new TypeReference<List<Message>>() { });
要使用JavaType,您需要通過分別將java.lang.reflect.Type傳遞到TypeFactory中來構造方法(有關詳細信息,請參閱JavaDocs):
List<Message> result = mapper.readValue(s, TypeFactory.collectionType(ArrayList.class, Message.class));
如果您不喜歡匿名內部類(可以類似地使用TypeFactory.parametericType(...)構造各種泛型類型)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.