【发布时间】:2014-11-03 16:14:21
【问题描述】:
我有以下用例:我的大量 ObjRef 子类都是这种形式(代码简化):
public class PlatformRef extends ObjRef {
public PlatformRef() {}
public PlatformRef(long id) {}
public PlatformRef(Long id) {);
}
反序列化时(我在要反序列化的对象中有这些类的数组,我的映射器使用默认类型)
...
"platforms" : [ {
"id" : 20001,
"name" : "my_platformRef_name",
"idAsLong" : 20001
}, {
"id" : 30001,
"name" : null,
"idAsLong" : 30001
} ]
...
jackson 2.4.3 throws: com.fasterxml.jackson.databind.JsonMappingException: Conflicting long creators
我尝试使用 ValueInstantiators#findValueInstantiator 指向这些 ObjRef 子类的自定义实例化器。
它失败是因为 BasicDeserializerFactory#findValueInstantiator 首先找到 bean 的所有可能的 ctors(如上失败的地方),然后才尝试找到用户定义的那些。
我该如何解决这个问题,因为:
- 我不能更改类,所以我不能使用注释
- 这些类的数量很多,使用 JsonIgnore/JSonCreator 混合可以工作,但很难看
【问题讨论】: