Java Jackson:名称为';默认参考';

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":""

我试图将一个json(字符串格式)映射到一个对象,我得到以下错误

com.fasterxml.jackson.databind.JsonMappingException:多个 名为“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);

我不知道这个错误,我做的和我在杰克逊主页上看到的完全一样。如果您在项目中对多个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()
be
MovementView getMovementView()
?鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及它为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。