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
方法在做什么,但您应该在方法名称中提供更多信息