使用 Jackson 将 JSON 反序列化为具有多态 setter 方法的对象

Deserializing JSON into object with polymorphic setter methods using Jackson

我正在尝试反序列化从 REST 应用程序发送的 JSON。该对象需要反序列化为包含多态方法的第 3 方对象。当我尝试使用 jackson 进行反序列化时,出现以下异常:

Conflicting setter definitions for property "system": ca.uhn.fhir.model.dstu2.composite.CodingDt#setSystem(1 params) vs ca.uhn.fhir.model.dstu2.composite.CodingDt#setSystem(1 params)

public CodingDt setSystem(UriDt theValue) {
    mySystem = theValue;
    return this;
}

public CodingDt setSystem( String theUri) {
    mySystem = new UriDt(theUri); 
    return this; 
}

我无法修改第 3 方 class,因此使用了票证 Jackson Mixin 中描述的 Jackson MixIn。这种方法似乎可行,但有很多 class 这个 class 指的是,它有同样的问题。如果我需要为每个 class 添加一个 MixIn,那么我最终会得到大量的 MixIn,这会降低代码的可读性和难以维护。

Jackson 中是否有任何我可以设置的全局设置,以便只使用一个设置器,或者是否有一个设置可以为解串器提供额外的信息,这样它就不会抱怨。

我已经使用了 Jackson 的 PropertyNamingStrategy,如中所述 http://www.javaroots.com/2013/03/how-to-use-naming-in-jackson.html。感谢@bhdrkn

我还必须使用以下代码来忽略未知属性,这样我的代码才能正常工作。

ObjectMapper objectMapper = getObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);