gpt4 book ai didi

java - 名称为 'defaultReference' 的反序列化和多个反向引用属性

转载 作者:搜寻专家 更新时间:2023-11-01 03:21:52 25 4
gpt4 key购买 nike

我正在尝试使用 Jackson 1.9 将嵌套的 JSON 对象反序列化为 POJO,但我遇到了麻烦。下面是类以及我尝试解析的示例 JSON 字符串。

(省略了 getter 和 setter)

JSON 字符串:

sellerJson = "[{\"id\":\"1\",\"first_name\":\"Joe\",\"last_name\":\"Sellerman\",\"company\":\"NY CANYON RANCH\"," +
"\"prorated_sellers\":[{\"first_name\":\"Steve\",\"last_name\":\"Jobs\",\"company\":\"NY CANYON RANCH\"}," +
"{\"first_name\":\"Lorne\",\"last_name\":\"Michaels\",\"company\":\"NY CANYON RANCH\"}]," +
"\"pens\":[{\"id\":\"2\",\"pen_no\":\"902\"}]}]";

Java 类:

@Table(name="seller")
public class SellerModel implements Serializable, Comparable<SellerModel> {

private static final long serialVersionUID = 201302111531L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id;

@Column()
private String first_name;

@Column()
private String last_name;

@Column()
private String company;

@Column()
private Boolean is_prorated;

@JsonIgnore
@ManyToOne()
@JoinColumn(name="parent_seller_id", referencedColumnName="id")
private SellerModel parent_seller;

@JsonManagedReference(value="seller-prorated")
@OneToMany(mappedBy = "parent_seller", cascade={CascadeType.ALL}, orphanRemoval=true)
private List<SellerModel> prorated_sellers;

@JsonManagedReference(value="seller-pen")
@OneToMany(mappedBy = "parent_seller", cascade={CascadeType.ALL}, orphanRemoval=true)
private List<PenModel> pens;
}

@Table(name="pen")
public class PenModel implements Serializable, Comparable<PenModel> {

private static final long serialVersionUID = 201302111537L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id;

@Column()
private String pen_no;

@JsonBackReference(value="pen-seller")
@ManyToOne()
@JoinColumn(name="parent_seller_id", referencedColumnName="id")
private SellerModel parent_seller;

@JsonManagedReference(value="pen-livestock")
@OneToMany(mappedBy = "parent_pen", cascade={CascadeType.ALL}, orphanRemoval=true)
private List<LivestockModel> livestock;
}

但是当我尝试执行反序列化时:

List<SellerModel> sellers = (List<SellerModel>) mapper.readValue(sellerJson, 
mapper.getTypeFactory().constructCollectionType(List.class, SellerModel.class));

我收到以下异常消息:

java.lang.IllegalArgumentException: Multiple back-reference properties with name 'defaultReference'

我读到提供 (value='something-unique') 注释属性应该可以解决这个问题,但我运气不好。有人有什么建议吗?

最佳答案

我至少看到两个问题。第一:

  • SellerModel.prorated_sellers 注释为 @JsonManagedReference(value="seller-pen")
  • PenModel.parent_seller 注释为 @JsonBackReference(value="pen-seller")

他们必须有相同的名字,才能相关。

第二个:

  • SellerModel.parent_seller 应使用 @JsonManagedReference(value="seller-prorated") 注释(Managed),并删除 @JsonIgnore注解
  • SellerModel.prorated_sellers 应使用 @JsonBackReference(value="seller-prorated") 注释(返回)

关于java - 名称为 'defaultReference' 的反序列化和多个反向引用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334308/

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