我正在尝试将json(字符串格式)映射到对象,我收到以下错误
com.fasterxml.jackson.databind.JsonMappingException:Multiple 名为'defaultReference'的后引用属性
这是json字符串
{"pledge":"74","client":"66","date":"","originId":"1","qualityId":"2","grade":"19","packing":"4","tons":"1000","fromDate":"","toDate":"","type":0,"remark":"","status":0,"area":"1531","id":-1,"refNumber":"","log":"","user":""}
这是对象
@Entity
@Table(name="movement", catalog = "wsmill3")
public class MovementView implements java.io.Serializable {
private Integer id;
private Integer originId;
private Integer qualityId;
private String refNumber;
private Integer client;
private String clientRef;
private Integer grade;
private Integer packing;
private Integer pledge;
private Integer area;
private Date date;
private Double tons;
private Date fromDate;
private Date toDate;
private String remark;
private User user;
private Byte status;
private String log;
private Byte type;
//constructor, getter and setter
这是做映射的代码
String data = request.getParameter("data");
ObjectMapper mapper = new ObjectMapper();
MovementView movement = mapper.readValue(data, MovementView.class);
我不知道这个错误,我确实和我在杰克逊主页上读到的方式完全相同。任何了解它的人,请帮帮我
答案 0 :(得分:40)
如果你对项目中的getter / setter方法使用@JsonBackReference两次以上,你应该用特定的引用名称来区分它们。也许只有一个' defaultReference'允许使用最新版本。
e.g
在MovementView.class中
@JsonBackReference(value="user-movement")
public User getUser() {
return user;
}
在User.class
中 @JsonManagedReference(value="user-movement")
public User getMovementView() {
return movementView;
}
答案 1 :(得分:0)
我也遇到过这个问题,但已经解决了。
//This is parent class
@Entity
@Table(name = "checklist")
@JsonIgnoreProperties("inspection")
public class Checklist implements java.io.Serializable {
@ManyToOne
@JoinColumn(name = "product_id", referencedColumnName = "id")
@JsonBackReference
private Product product;
@OneToMany(mappedBy = "checklists", cascade = CascadeType.ALL)
@JsonManagedReference
private Set<Inspection> inspection = new HashSet<Inspection>();
//Constructor
//Getter and Setter
}
//This is child class
@Entity
@Table(name = "inspections")
public class Inspection {
@ManyToOne
@JoinColumn(name = "chk_id", referencedColumnName = "id")
private Checklist checklists;
//Constructor
//Getter and Setter
}
提及@JsonIgnoreProperties("inspection")
和@JsonManagedReference
。
解决了在同一个父类中使用两个@JSONBackRefrence
引发的问题。
答案 2 :(得分:0)
我认为处理此问题的最佳方法是使用@JsonIdentityInfo注释。查看演示此内容的线程。How to use @JsonIdentityInfo with circular references?
答案 3 :(得分:0)
我也遇到了这个问题,并解决了。 您应该在应用程序中命名所有JsonManagedReferences和JsonBackReference。
示例:@JsonManagedReference(value =“ user-person”) @JsonBackReference(value =“ user-person”)