Jackson 2.2.3 中属性的 getter 定义相互冲突

2024-02-25

为了简单起见,这里是一个简单的类:

class GetterMethodsObject {

    int id = 10;

    public int getId() {
        return id;
    }

    // @JsonIgnore
    public boolean isId() {
        return true;
    }
}

序列化这个对象应该给出:

{"id":10}

因为有公共 getter 方法。使用示例:

mapper=new ObjectMapper();
mapper.writeValueAsString(object);

但我遇到了例外:

com.fasterxml.jackson.databind.JsonMappingException:
Conflicting getter definitions for property "id": org.citi.facility.GetterMethodsObject#isId(0 params) vs org.citi.facility.GetterMethodsObject#getId(0 params)

As id is Integer所以,我期待着Jackson打电话getId()方法但不是isId(). isId()仅当 id 为布尔值时才应调用方法?就连我也把@JsonIgnore这没有帮助。我无法改变实际对象。如何解决这个问题?


Jackson库检查序列化/反序列化的 getter/setter 方法。你可以通过下面的脏黑客来忽略这个恼人的错误。您必须使用两个注释:

  1. @JsonIgnore - tell Jackson忽略这个属性
  2. @JsonProperty("isId") - tell Jackson在序列化过程中使用此方法名称。看起来像Jackson发现冲突,因为它发现了两种方法,并且这两种方法链接到一个字段 -id.

Your POJO类应如下所示:

class GetterMethodsObject {

    private int id = 10;

    public int getId() {
        return id;
    }

    @JsonIgnore
    @JsonProperty("isId")
    public boolean isId() {
        return true;
    }
}

另一个解决方案:您应该重命名isId方法,因为它令人困惑。您应该考虑:hasId甚至更好hasValidId。我不知道你的是什么isId方法正在做,但您应该在方法名称中提供更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson 2.2.3 中属性的 getter 定义相互冲突 的相关文章