2013-11-21 5 views
13

Ich versuche, eine json (String-Format) auf ein Objekt abzubilden und ich erhalte die folgende FehlerJackson: Mehrere Rückverweis Eigenschaften mit dem Namen ‚defaultReference‘

com.fasterxml.jackson.databind. JsonMappingException: Mehrere Rückverweis Eigenschaften mit dem Namen 'defaultReference'

Dies ist der jSON-String

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

Dies ist das Objekt

@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 

und dies ist der Code-Mapping

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

ich mit diesem Fehler keine Ahnung haben, zu tun, ich habe genau die gleiche Art und Weise, wie ich auf Jackson Homepage lesen. Jeder, der es weiß, bitte helfen Sie mir

Antwort

31

Wenn Sie @ JsonBackReference auf Ihre Getter/Setter-Methode in Ihrem Projekt mehr als zweimal verwenden, sollten Sie sie mit einem bestimmten Referenznamen unterscheiden. Vielleicht ist nur eine 'defaultReference' erlaubt Die neueste version.

beispiel

in MovementView.class

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

in User.class

@JsonManagedReference(value="user-movement") 
    public User getMovementView() { 
    return movementView; 
} 
+0

Ich habe das getan und ich bekomme immer noch die Ausnahme? – ThatGuyGrant

+0

@ ThatGuyGrant vielleicht Sie sollten alle anderen 'JsonManagedReference's und' JsonBackReference's mit angeben, wie in diesem Beispiel angegeben, da es nur eine Verbindung ohne '(value =" etwas ") geben kann. – Casper

0

ich auch dieses Problem konfrontiert, aber es gelöst.

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

von @JsonIgnoreProperties("inspection") und @JsonManagedReference zu erwähnen.

Das Problem behoben, das durch die Verwendung von zwei @JSONBackRefrence in derselben übergeordneten Klasse ausgelöst wurde.

Verwandte Themen