我需要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]