Json Jackson 2.2.3中属性的getter定义冲突

Json Jackson 2.2.3中属性的getter定义冲突,json,jackson,Json,Jackson,为了简单起见,这里有一个简单的类: class GetterMethodsObject { int id = 10; public int getId() { return id; } // @JsonIgnore public boolean isId() { return true; } } 序列化此对象应提供: {"id":10} 因为有公共getter方法。用法示例: mapper=new Obje

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

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)

由于
id
Integer
所以,我希望
Jackson
调用
getId()
方法,而不是
isId()
<代码>isId()仅当id为布尔值时才应调用方法?即使我把
@JsonIgnore
放进去也没有用。我不能改变实际对象。如何解决此问题?

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

  • @JsonIgnore
    -告诉
    Jackson
    忽略此属性
  • @JsonProperty(“isId”)
    -告诉
    Jackson
    在序列化过程中使用此方法名。看起来像是
    Jackson
    找到了冲突,因为它找到了两个方法,而这两个方法链接到一个字段-
    id
  • 您的
    POJO
    类应该如下所示:

    class GetterMethodsObject {
    
        private int id = 10;
    
        public int getId() {
            return id;
        }
    
        @JsonIgnore
        @JsonProperty("isId")
        public boolean isId() {
            return true;
        }
    }
    
    另一个解决方案:您应该重命名
    isId
    方法,因为它很容易混淆。您应该考虑:
    hasId
    或者更好的
    hasValidId
    。我不知道您的
    isId
    方法在做什么,但您应该在方法名称中提供更多信息