使用 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);
我正在尝试反序列化从 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);