JSON使用Jackson将特定类型反序列化为Object

时间:2018-03-12 13:33:23

标签: java json jackson

我需要de / serialize Java 对象。我通过Domain包分享这些类型。所以双方都知道这些类型。

我使用@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")注释了这些类,并且我看到@class属性设置正确。

我使用Object readValue = om.readValue(record.value(), Object.class);

反序列化字符串

我不知道具体的类型,但都是对象。问题是,这不会产生@class属性中指定的类型,而是LinkedHashMap(我认为我是通用类型Jackson使用的)。

那么如何将字符串反序列化为@class属性中指定的类型为Object

稍后我会编写像if(object instanceof specificType)...

这样的逻辑

编辑使用抽象类/接口标记所有域

如果无法将通用反序列化作为“对象”,我可以使用extends MyDomain“标记”所有对象。而“MyDomain”是一个空的抽象类。

问题是这不起作用:

Problem on desrialization of record paylod. Payload is: {"OnClientStateMessage":{"@class":"com.domain.message.OnClientStateMessage","userId":"xyz","state":"DISCONNECT"}}. Cause: 
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class com.domain.message.MyDomain]: missing type id property '@class'
 at [Source: (String)"{"OnClientStateMessage":{"@class":"com.domain.message.OnClientStateMessage","userId":"xyz","state":"DISCONNECT"}}"; line: 1, column: 136]

0 个答案:

没有答案