MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

ConversionFailedException :la persistance d'un DBObject mais la récupération renvoie un LinkedHashMap< ?, ?>

votre erreur est probablement exactement ce qu'elle indique dans votre exception :une ConversionFailed Exception causé par quelqu'un/quelque chose essayant de convertir depuis ArrayList à un LinkedHashMap; mais il n'y a tout simplement pas de convertisseur approprié pour cela (ConverterNotFoundException ).

il est impossible de dire exactement où cela se passe puisque vous n'avez posté que très peu de code. Je ne trouve pas la chaîne "myString" dans votre code, mais elle est mentionnée dans l'erreur.

Les données de printemps utilisent généralement des convertisseurs dans leur processus de cartographie. pour avoir plus de contrôle sur le processus de mappage, certaines personnes préfèrent implémenter et enregistrer un convertisseur personnalisé pour leurs classes.

vous pouvez en savoir plus sur les convertisseurs ici

http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/mongo.core.html#mongo.custom-converters

et ici

http://docs .spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert

peut-être que cela vous suffira déjà pour corriger vous-même l'erreur.

Edit :un petit commentaire sur cette ligne :

potentialCandidatesObj.setPotentialcandidates((DBObject)JSON.parse(valStr));

vous effectuez un cast vers DBObject avant d'appeler le setter, car le setter prend un DBObject. c'est mauvais, vous devriez créer un autre setter pour JSON et y faire le casting, ou vous finirez par faire cette opération de casting partout dans votre code; ce n'est pas très SEC.

il y a aussi quelque chose appelé DBRefs dans les données de printemps :The mapping framework doesn't have to store child objects embedded within the document. You can also store them separately and use a DBRef to refer to that document. When the object is loaded from MongoDB, those references will be eagerly resolved and you will get back a mapped object that looks the same as if it had been stored embedded within your master document. vous préférerez peut-être cela à un DBObject intégré.