使用Jackson

时间:2015-06-15 05:30:01

标签: java jackson deserialization

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

  

属性“system”的冲突setter定义:   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; 
}

我无法修改第三方类,因此使用了票据Jackson Mixin中描述的Jackson MixIn。这种方法似乎有效,但是这个类引用了许多类,它们具有相同的问题。如果我需要为每个类添加一个MixIn,那么我最终会得到大量的MixIn,这使得代码的可读性降低,难以维护。

我可以设置杰克逊中的任何全局设置,以便只使用其中一个设置器,或设置为deserailizer提供其他信息,以便它不会抱怨。

1 个答案:

答案 0 :(得分:0)

我已经使用了PropertyNamingStrategy for Jackson,如中所述 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);