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

标签 json jackson

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

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/

    相关文章:

    java - 使用哪些框架来分析 REST 服务的响应?

    java - 启用对象映射器 writeValueAsString 方法以包含空值

    java - 将 json 数组转换为 hashmap<string,object>

    ios - Json解析、字典值打印

    java - JSONException : Value &lt;! java.lang 类型的 DOCTYPE 无法转换为 JSONObject

    javascript - 将数组转换为 json - smarty

    java - 忽略 jackson 属性(property)

    Java序列化过程中同一对象字段的多个json名称

    java - 使用 Jackson 自定义反序列化列表

    java - Gson - 从 JSON 字符串中获取值