Jackson objectMapper 为相同的 json 提供不同的对象

Jackson objectMapper gives different object for same json

我正在将 json 传递给 objectmapper。 JSON 字符串如下所示:

{          
  "id": "ID1",
  "identifier" : "XYZ",
  "data": [
  {
    "id": "sampleParentID",
    "childrenElements": [
    {
      "id" : "sampleChildID",
      "content" : "sample child content",  
    }
    ]
  }
  ]
}
 val objectMapper = ObjectMapper().registerModule(KotlinModule())
 val obj: Object1 = objectMapper.readValue(jsonString)

我的 class 看起来像这样:

data class Object 1 (
 var id : String? = null,
 var identifier : String? = null,
 var data: MutableList<Element>? = null,

){
 // some functions
}
class Element (
 var id : String?= null
 var content : String? = null
 var children: List<Element>? = listOf(),

) {
 // som functions
}

从obj开始,数据字段是嵌套的,它本身就是一个对象。 我想获得 data 的 hashCode,所以我做了 obj.data.hashCode()。假设生成了 12345。

我将其存储在数据库中。现在,假设用户发送另一个具有完全相同 JSON 的请求,JSON 再次转换为一个对象,我从中提取数据字段,现在当我执行 obj.data.hashCode(), 12345不会生成,而是会生成其他一些数字。

这种行为是预期的吗?如果是,解决方法是什么?

更新:添加了 classes 描述。

鉴于您的 Element class 不是数据 class(在这种情况下,您将获得基于所有 class 的 hashCode() 方法实现properties)你将需要自己编写 hashCode() 方法,这样默认的方法(基于对象内存引用)就不会被使用,并且你可以摆脱你当前面临的行为。