【发布时间】:2016-10-19 11:46:46
【问题描述】:
全部,
任何人都可以看到我的方式的错误吗?
我需要从 JSON 进行自定义反序列化,才能在 Drop Wizard 中工作。我遵循了一些方法,但它不起作用。结果是我没有可用的、默认的、无参数的构造函数。相反,我有一个工厂方法。我无法修改我试图反序列化的类。我可以序列化为 JSON 序列化和反序列化到 XML 和从 XML 反序列化。但是从 JSON 反序列化是个障碍。
我已经阅读了我在 SO 和其他地方可以找到的所有内容,但没有任何规定的工作。
我创建了一个 mixin:
public class PatientMixin {
@JsonCreator
public static ForecastPatient createForecastForecastPatient() {
return ForecastFactory.eINSTANCE.createForecastPatient();
}
}
在我的 DW Application.run(...) 中,我这样做了:
<code before>
environment.getObjectMapper().addMixIn(ForecastPatient.class, PatientMixin.class);
<code after>
以上内容应该足以让 Jackson 找到我的 Mixin 并致电工厂。相反,我收到了一个错误:
Can not construct instance of forecast.ForecastPatient, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
我原以为我已经正确映射了东西,但显然没有。此外,我正在阅读的许多示例似乎已经过时了。
提前致谢
【问题讨论】:
-
forecast.ForecastPatient 是抽象类吗?
-
不,它不是抽象的,它是一个接口,工厂方法返回一个实现。预测患者等。由eclipse建模框架生成。
-
Jackson 不能实例化一个接口你应该告诉 jackson 你想实例化哪个实现
标签: java serialization jackson deserialization