gpt4 book ai didi

json - Jackson 2.2.3 中属性的 getter 定义冲突

转载 作者:行者123 更新时间:2023-12-04 15:34:16 25 4
gpt4 key购买 nike

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

class GetterMethodsObject {

int id = 10;

public int getId() {
return id;
}

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

序列化这个对象应该给出:
{"id":10}

因为有公共(public)getter方法。使用示例:
mapper=new ObjectMapper();
mapper.writeValueAsString(object);

但我得到了异常(exception):
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)

idInteger所以,我期待 Jackson调用 getId()方法但不是 isId() . isId()仅当 id 为 bool 值时才应调用方法?甚至我把 @JsonIgnore它没有帮助。我无法更改实际对象。如何解决这个问题?

最佳答案

Jackson库检查 getter/setters 方法以进行序列化/反序列化。您可以通过以下肮脏的技巧来忽略这个烦人的错误。您必须使用两个注释:

  • @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方法正在执行,但您应该在方法名称中提供更多信息。

    关于json - Jackson 2.2.3 中属性的 getter 定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495617/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com