如何让FasterXMLJackson使用@JsonCreator mixin?

时间:2016-10-19 11:46:47

标签: java serialization jackson deserialization

所有

任何人都可以看到我的方式错误吗?

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

以上应该足以让杰克逊找到我的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

我原本以为我把事情映射得恰当但显然没有。此外,我正在阅读的许多例子似乎都已过时。

提前致谢

1 个答案:

答案 0 :(得分:0)

  

默认情况下,杰克逊尝试使用&#34;默认&#34;构造函数(一个   在创建值实例时,不带参数。但你也可以   选择使用另一个构造函数或静态工厂方法   创建实例。为此,您需要使用注释   @JsonCreator,可能还有@JsonProperty注释来绑定名称   参数

     

https://github.com/FasterXML/jackson-annotations#using-constructors-or-factory-methods

表示ForecastFactory.createForecastPatient()应使用@JsonCreator

进行注释