Voici les classes d'entités pour mon projetMappingJackson2HttpMessageConverter ne peut pas trouver un (Carte) désérialiseur clé pour le type
import java.util.Iterator; import java.util.Map; import java.util.Set; @Entity @Table(name="training") public class Training { @Id @GeneratedValue private long id; private String topic; @OneToMany(mappedBy="training") private Set sessions = new HashSet(); public Training(){ } public Training(String topic, TransitionLevel level, Set sessions) { this.topic = topic; this.level = level; this.sessions = sessions; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTopic() { return topic; } public void setTopic(String topic) { this.topic = topic; } public Set getSessions() { return sessions; } public void setSessions(Set sessions) { this.sessions = sessions; } }
Voici la session Tableau
@Entity @Table(name="session") public class Session { @Id @GeneratedValue private long id; private String location; @ManyToOne @JoinColumn(name="training_id") @JsonIgnore private Training training; private Date start; private Date end; @JoinTable(name="session_user", joinColumns = @JoinColumn(name="session_id"), inverseJoinColumns = @JoinColumn(name="trainingRole_id")) @MapKeyJoinColumn(name="user_id") @ElementCollection @JsonIgnore private Map<User, TrainingRole> users = new HashMap<User, TrainingRole>(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public Training getTraining() { return training; } public void setTraining(Training training) { this.training = training; } public Date getStart() { return start; } public void setStart(Date start) { this.start = start; } public Date getEnd() { return end; } public void setEnd(Date end) { this.end = end; } public Map <User, TrainingRole> getUsers() { return users; } public void setUsers(Map<User, TrainingRole> users) { this.users = users; } }
Voici l'entité utilisateur
J'utilise JPARepository pour enregistrer des objets de formation et de session dans ma base de données mysqlJ'utilise JPARepositoryMais chaque fois que je sauve l'objet de la formation ou de l'objet de la session
Je reçois l'erreur
c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [simple type, class Session]: com.fasterxml.jackson.databind.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class User]
Je googlé et trouvé que je dois sérialisation et la désérialisation manuellement .. mais je ne sais pas comment faire cela .. S'il vous plaît aidez-moi ..
Hey Man .. cela a fonctionné .. Maintenant, l'erreur a disparu et JSON a également obtenu formé .. mais avez-vous une idée de supprimer le dos slash .. le JSON généré est comme ceci "users": {"{\" id \ ": 1, \" csl \ ": \" admin \ ", \" nom complet \ ": \" admin \ ", \ "... .... .. .. – Nawaz
Je ne pense pas que vous pouvez. Le sérialiseur de clés crée une chaîne à partir de l'objet, car json ne fonctionne qu'avec des chaînes comme clés de carte. Si vous supprimez les barres obliques arrière, vous aurez un JSON mal formé. Une deuxième option consiste à remplacer la clé par une chaîne. – Franjavi