Lorsque j'insère une liste dans MongoDB, il existe un problème:
DBCollection coll = db.getCollection("test"); DBObject record = new BasicDBObject(); List<Person> persons= new ArrayList<Person>(); persons.add(new Person("Jack")); record.put("person", persons); coll.save(record);
8 Réponses :
Il suffit d'implémenter Interface Serializable dans Classe de personne. P>
Il sera également bon de définir un afaik, tout en créant une classe de pojo en Java, la classe doit être sérialisable, s'il va être transféré sur un flux, un constructeur par défaut et permet d'accéder aux propriétés / champs à l'aide de méthodes getter et de réglage. P >
Vous êtes peut-être intéressé à lire ceci: Découvrez les secrets de l'API de sérialisation Java p> SerialVersionSionUID code> dans votre classe. p>
Mais j'ai toujours le problème même si je met en œuvre l'interface sérialisable; Personne de classe implémente Serializable {Nom de la chaîne privée; Personne publique (nom de chaîne) {this.name = nom; } String publique getname () {nom de retour; } Public Void SetName (nom de chaîne) {this.name = nom; }}
@Vienna: Avez-vous eu la même exception ou une autre?
@Vienna: essayez d'ajouter un constructeur par défaut dans la classe de personne personne publique () {} code>.
@vienna, c'est parce que vous n'avez que 1 constructeur et qui prend une dispute. Une classe de pojo ne peut avoir aucun argument ou constructeur d'arguments à base de zéro. Je suggère de faire ce que Harry Joy a déclaré ci-dessus.
@Vienna: oui extension basicdbObject résout le problème cause basiquedbobjecte it auto Implémente sérialisable.
La personne de classe devrait implémenter java.io.Sérialisable code> interface. p>
personne de classe implémente Serializable code> p>
Tout d'abord, vous devez savoir pourquoi vous faites de la classe sérialisable? Chaque fois que vous souhaitez déplacer OBEEJECT sur réseau vers un fichier, une base de données, un réseau, un processus ou tout autre système. Dans Java Mise en œuvre simple. Il suffit d'implémenter une interface sérialisable. P>
Voici l'exemple de code pour rendre l'objet employé sérialiséisé:
public class Employee implements Serializable { private int empId; private String name; public int getEmpId() { return empId; } public String getName() { return name; } public void setEmpId(int empId) { this.empId = empId; } public void setName(String name) { this.name = name; } @Override public String toString() { return "EMployee id : " + empId + " \nEmployee Name : " + name; } } //Another Main Class public class Main{ public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { String filename = "data.txt"; Employee e = new Employee(); e.setEmpId(101); e.setName("Yasir Shabbir"); FileOutputStream fos = null; ObjectOutputStream out = null; fos = new FileOutputStream(filename); out = new ObjectOutputStream(fos); out.writeObject(e); out.close(); // Now to read the object from file // save the object to file FileInputStream fis = null; ObjectInputStream in = null; fis = new FileInputStream(filename); in = new ObjectInputStream(fis); e = (Employee) in.readObject(); in.close(); System.out.println(e.toString()); } }
Le problème ici n'est pas dans "implémenter sérialisable". Le problème est que cet objet n'est pas converti dans la DBObject.
solution possible: p>
J'ai eu la même exception tout en travaillant avec MongoDB. J'ai essayé de faire la classe problématique sérialisable, mais cela n'a pas résolu mon problème.
Voici ce qui a fonctionné pour moi.
Étendre la classe comme un enfant de basedbobject. Bien sûr, cela ne fonctionne que si le problème est causé par MongoDB. P> source d'origine p> http://techidiocy.com/cant-serialize-class-mongodb-illegal-argument-exception/#Comment- 1298 p> p>
Vous pouvez y parvenir en utilisant le code suivant:
.... PersonList personList = new PersonList(); personList.person = new ArrayList<>(); // add persons to the list .... .... record.put("personsList", personList); .... // rest of your code
Comment avez-vous fait cela @Vienna .. plz m'aidez-moi à avoir le même problème. Aide de plz
Une observation: l'un des avantages de Mongodb est la capacité d'évoluer le schéma au fil du temps sans avoir à mettre à jour les documents existants avec ces nouveaux champs. Vous pouvez donc vouloir stocker vos objets en tant que documents (c'est-à-dire avec un champ pour nom, etc.), ou si vous souhaitez vraiment faire une sérialisation binaire, vous préférez utiliser quelque chose comme des tampons de protocole Google qui est un avenir plus futur. manière d'atteindre la sérialisation binaire.