2013-11-21 25 views
13

我試圖映射一個JSON(字符串格式)到一個對象,我收到以下錯誤傑克遜:有名字多次向後引用屬性「defaultReference」

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); 

我有這個錯誤不知道,我沒有確切的相同的方式,我對傑克遜的主頁閱讀。任何知道它的人,請幫助我

回答

31

如果您在項目中的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; 
} 
+0

我已經做到了這一點,我仍然得到例外? – ThatGuyGrant

+0

@ThatGuyGrant也許你應該命名所有其他的'JsonManagedReference'和'JsonBackReference'作爲這個例子的狀態,因爲只有一個連接沒有'(value =「something」)''。 – Casper

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引發的問題。