无法使用杰克逊反序列化包含 2 个具有相同 ID 的对象的 Json
Unable to deserialize Json that contain 2 objects with the same ID using jackson
我已经使用 jackson JsonIdentityInfo 来处理 spring mvc 中的递归对象引用。
我遇到了一个问题,即无法反序列化包含 2 个具有相同 ID 的对象的 Json。
{
"organizations": [
{
"organizationId": 1,
"organizationName": "org1",
"enterprise": {
"enterpriseId": 1,
"enterpriseName": "ent1",
"organizations": null
}
},
{
"organizationId": 2,
"organizationName": "org2",
"enterprise": 1
}
]
}
如果您看到上面的内容,则两个组织都映射到企业“1”。对于第一个组织,它是整个企业对象,但对于组织 2,它只提供 ID。
我也需要为组织 2 获取整个对象。
我的 POJO 声明:
@Entity
@Table(name = "organization")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "organizationId")
public class Organization implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "organization_id")
private Long organizationId;
...
@ManyToOne
@JoinTable(name = "enterprise_organization", joinColumns = {
@JoinColumn(name = "organization_id") }, inverseJoinColumns = { @JoinColumn(name = "enterprise_id") })
private Enterprise enterprise;
...
}
@Entity
@Table(name = "enterprise")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "enterpriseId")
public class Enterprise extends BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "enterprise_id")
private Long enterpriseId;
...
@OneToMany(mappedBy = "enterprise")
private List<Organization> organizations;
...
}
我搜索了 google 和 SO 但没有成功。
反序列化包含 2 个具有相同 ID 的对象的 Json 需要进行哪些更改?
经过多次尝试,@JsonIgnoreProperties 解决了我的问题。
示例:“@JsonIgnoreProperties(allowSetters = true, value = { "enterprise" })”
我已经使用 jackson JsonIdentityInfo 来处理 spring mvc 中的递归对象引用。 我遇到了一个问题,即无法反序列化包含 2 个具有相同 ID 的对象的 Json。
{
"organizations": [
{
"organizationId": 1,
"organizationName": "org1",
"enterprise": {
"enterpriseId": 1,
"enterpriseName": "ent1",
"organizations": null
}
},
{
"organizationId": 2,
"organizationName": "org2",
"enterprise": 1
}
]
}
如果您看到上面的内容,则两个组织都映射到企业“1”。对于第一个组织,它是整个企业对象,但对于组织 2,它只提供 ID。 我也需要为组织 2 获取整个对象。
我的 POJO 声明:
@Entity
@Table(name = "organization")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "organizationId")
public class Organization implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "organization_id")
private Long organizationId;
...
@ManyToOne
@JoinTable(name = "enterprise_organization", joinColumns = {
@JoinColumn(name = "organization_id") }, inverseJoinColumns = { @JoinColumn(name = "enterprise_id") })
private Enterprise enterprise;
...
}
@Entity
@Table(name = "enterprise")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "enterpriseId")
public class Enterprise extends BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "enterprise_id")
private Long enterpriseId;
...
@OneToMany(mappedBy = "enterprise")
private List<Organization> organizations;
...
}
我搜索了 google 和 SO 但没有成功。
反序列化包含 2 个具有相同 ID 的对象的 Json 需要进行哪些更改?
经过多次尝试,@JsonIgnoreProperties 解决了我的问题。
示例:“@JsonIgnoreProperties(allowSetters = true, value = { "enterprise" })”