web-dev-qa-db-fra.com

Jackson: propriétés de référence arrière multiples avec le nom 'defaultReference'

J'essaye de mapper un json (format de chaîne) à un objet et j'obtiens l'erreur suivante

com.fasterxml.jackson.databind.JsonMappingException: plusieurs propriétés de référence arrière avec le nom 'defaultReference'

C'est la chaîne 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":""}

C'est l'objet

@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

et c'est le code pour faire la cartographie

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

Je n'ai aucune idée de cette erreur, j'ai fait exactement la même chose que j'ai lu sur la page d'accueil de Jackson. Quiconque le sait, aide-moi s'il te plaît

15
Kien Dang Ngoc

Si vous utilisez @JsonBackReference plus de deux fois sur votre méthode getter/setter dans votre projet, vous devez les distinguer avec un nom de référence spécifique. Peut-être qu'un seul 'defaultReference' est autorisé dans la dernière version.

par exemple

dans MovementView.class

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

dans User.class

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

J'ai également fait face à ce problème, mais je l'ai résolu.

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

En mentionnant @JsonIgnoreProperties("inspection") et @JsonManagedReference.

Résolution du problème posé à l'aide de deux @JSONBackRefrence dans la même classe parent.

0
Vivek Gangwar

Je pense que la meilleure façon de gérer cela consiste à utiliser @JsonIdentityInfo annotation.voir le fil qui le démontre. Comment utiliser @JsonIdentityInfo avec des références circulaires?

0
Gayan Prasanna