2013-11-21 18 views
13

Ben bir nesneye bir json (dize biçimi) eşlemek için çalışıyorum ve şu hatayıJackson: isimde birden çok arka referans özellikleri 'defaultReference'

com.fasterxml.jackson.databind olsun. JsonMappingException: Çoklu adıyla arka referans özellikleri 'defaultReference'

Bu json dize

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

olduğunu Bu nesne

@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 

ve bu Jackson ana sayfasında okumak gibi ben tam aynı şekilde yaptım, bu hata ile hiçbir fikrim yok haritalayan

String data = request.getParameter("data"); 
ObjectMapper mapper = new ObjectMapper(); 
MovementView movement = mapper.readValue(data, MovementView.class); 

yapmak koddur. Bunu bilen herkes, lütfen bana yardım edin

cevap

31

Projenizde alıcı/ayarlayıcı yönteminizde @JsonBackReference öğesini iki kattan fazla kullanıyorsanız, bunları belirli bir Referans adıyla ayırmalısınız. Yalnızca bir 'defaultReference' seçeneğine izin verilir. Son sürüm.

örneğin

Ben de bu sorunla karşı karşıya
@JsonManagedReference(value="user-movement") 
    public User getMovementView() { 
    return movementView; 
} 
+0

Bunu yaptım ve hala istisna alıyorum? – ThatGuyGrant

+0

@ThatGuyGrant Belki diğer tüm JsonManagedReference ve JsonBackReference adlarını, bu örnekte belirtildiği gibi belirtmelisiniz, çünkü "(value =" bir şey ")' olmaksızın yalnızca bir bağlantı olabilir. – Casper

0

User.class

yılında
@JsonBackReference(value="user-movement") 
public User getUser() { 
    return user; 
} 

MovementView.class

yılında

, ama çözüldü. @JsonIgnoreProperties("inspection") ve @JsonManagedReference değinerek

//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 
} 

.

Aynı üst sınıftaki iki @JSONBackRefrence kullanarak ortaya çıkan sorun giderildi.