Java Jackson:名称为';默认参考';
我试图将一个json(字符串格式)映射到一个对象,我得到以下错误 com.fasterxml.jackson.databind.JsonMappingException:多个 名为“defaultReference”的反向引用属性 这是json字符串Java Jackson:名称为';默认参考';,java,spring,hibernate,jackson,Java,Spring,Hibernate,Jackson,我试图将一个json(字符串格式)映射到一个对象,我得到以下错误 com.fasterxml.jackson.databind.JsonMappingException:多个 名为“defaultReference”的反向引用属性 这是json字符串 {"pledge":"74","client":"66","date":"","originId":"1","qualityId":"2","grade":"19","packing":"4","tons":"1000","fromDate":""
{"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);
我不知道这个错误,我做的和我在杰克逊主页上看到的完全一样。如果您在项目中对多个getter/setter方法使用了
@JsonBackReference
,则应使用特定的引用名称来区分它们
最新版本中可能只允许一个'defaultReference'
e、 g
在MovementView.java中
@JsonBackReference(value=“用户移动”)
公共用户getUser(){
返回用户;
}
在User.java中
@JsonManagedReference(value=“用户移动”)
public MovementView getMovementView(){
返回运动视图;
}
我也面临这个问题,但解决了它
//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
}
//这是父类
@实体
@表(name=“检查表”)
@JsonIgnoreProperties(“检查”)
公共类清单实现java.io.Serializable{
@许多酮
@JoinColumn(name=“product\u id”,referencedColumnName=“id”)
@JsonBackReference
私人产品;
@OneToMany(mappedBy=“checklist”,cascade=CascadeType.ALL)
@JsonManagedReference
私有集检查=新HashSet();
//建造师
//接二连三
}
//这是儿童班
@实体
@表(name=“检查”)
公开课检查{
@许多酮
@JoinColumn(name=“chk\u id”,referencedColumnName=“id”)
私人清单;
//建造师
//接二连三
}
通过提及@JsonIgnoreProperties(“检查”)
和@JsonManagedReference
解决了在同一父类中使用两个@jsonbackreference
所引发的问题。我认为处理此问题的最佳方法是使用@JsonIdentityInfo注释。请参阅演示此问题的线程。我也遇到了此问题,并解决了它。
您应该命名应用程序中的所有JSONManagedReference和JsonBackReference
示例:@JsonManagedReference(value=“user person”)
@JsonBackReference(value=“user person”)@ThatGuyGrant也许您应该将所有其他JsonManagedReference
s和JsonBackReference
s命名为,正如本例所述,因为只有一个连接没有(value=“something”)
。不应该用户getMovementView()
beMovementView getMovementView()
?鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及它为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。