10
votes

Comment sérialiser la classe?

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);


2 commentaires

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.


8 Réponses :


7
votes

Il suffit d'implémenter Interface Serializable dans Classe de personne.

Il sera également bon de définir un SerialVersionSionUID dans votre classe.

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.

Vous êtes peut-être intéressé à lire ceci: Découvrez les secrets de l'API de sérialisation Java


5 commentaires

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 () {} .


@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.



0
votes

La personne de classe devrait implémenter java.io.Sérialisable interface.

personne de classe implémente Serializable


0 commentaires

0
votes

Votre Personne La définition de la classe doit avoir implémente sérialisable afin de pouvoir être sérialisé, par exemple: xxx

voici quelques Liens utiles sur la sérialisation de l'objet Java: lien , link .


0 commentaires

-1
votes

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.


0 commentaires

0
votes

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());
    }
}


0 commentaires

0
votes

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: xxx


0 commentaires

1
votes

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. xxx

source d'origine

http://techidiocy.com/cant-serialize-class-mongodb-illegal-argument-exception/#Comment- 1298


0 commentaires

0
votes

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


0 commentaires