升级后的jackson到2.8.8版本后我无法反序列化泛型类。
我为DataJson使用自定义反序列化器,升级后杰克逊获得JsonMappingException
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.example.dto.ConcernData: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: {
"type": {
"name": "TYPE_NAME"
},
"people": [
{"id": 1}
]
}; line: 6, column: 5] (through reference chain: com.example.dto.DataJson["people"]->java.util.ArrayList[0])
我能够反序列化DataJson
的杰克逊的最新版本是2.6.7。
答案 0 :(得分:1)
如果您定义DataJson
以扩展具有相同类型BasicDataJson
的(通用)T
,则在2.8.8中可以正常工作。 E.g。
public class DataJson<T extends ConcernData> extends BasicDataJson<T>
而不是像extends BasicDataJson
这样的原始类型。
我注意到它适用于Jackson 2.6.x但不适用于2.7.x或2.8.x.请注意Jackson 2.7 here
的发行说明中的这一段某些棘手的边缘情况不起作用。 具体来说,键入变量别名(变量名称如T的情况 在层次结构中的不同点处绑定到不同类型)不是 正确解析,因为变量绑定是全局构造的 不是等级的。