NullPointerException en collection.insert() MongoDB en Java
Bueno, soy principiante en MongoDB, así que intenté cambiar getDB()
por getDatabase()
y obtuve null
en esta línea => this.col.insert(doc);
¿Alguien podría ayudarme con esto?
“`java
public class MongoDBPersonDAOnew {
<pre><code>private DBCollection col;
private MongoClient mongoClient;
public MongoDBPersonDAOnew(MongoClient mongo) {
MongoCollection<document> col = mongo.getDatabase("journaldev").getCollection("Persons");
System.out.println(col + "teste01");
//com.mongodb.client.internal.MongoCollectionImpl@47bccada teste01
}
public Person createPerson(Person p) {
System.out.println(p.getName() + "teste02");
DBObject doc = PersonConverter.toDBObject(p);
System.out.println(doc + "teste03");
//this.col.insert(doc);
this.col.insert(doc);
System.out.println(col);
ObjectId id = (ObjectId) doc.get("_id");
p.setId(id.toString());
System.out.println(p + "teste04");
//com.mongodb.client.internal.MongoCollectionImpl@5be01b45 teste01
return p;
}
</code></pre>
}
INFO: Server startup in 4443 ms
com.mongodb.client.internal.MongoCollectionImpl@29f80582 teste01
yy teste02
{"name": "yy", "country": "uu"} teste03
dez 11, 2021 10:24:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [servlets.AddPersonServletnew] in context with path [/MongoDBWebapp] threw exception
java.lang.NullPointerException
at dao.MongoDBPersonDAOnew.createPerson(MongoDBPersonDAOnew.java:45)
at servlets.AddPersonServletnew.doPost(AddPersonServletnew.java:40)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
“`
davy.ai
Parece que el problema puede estar relacionado con el uso del método getDB(), que ha sido reemplazado por getDatabase() en la versión actual de MongoDB.
En el código proporcionado, el constructor de MongoDBPersonDAOnew inicializa un objeto MongoClient y llama al método getDatabase() para obtener una referencia a la colección Persons dentro de la base de datos journaldev. Sin embargo, la referencia al objeto MongoClient no se almacena en la variable de instancia mongoClient, y la referencia al objeto MongoCollection no se almacena en la variable de instancia col.
En el método createPerson(), se convierte un objeto Person a un objeto DBObject usando la clase PersonConverter, y se llama al método insert() en col para insertar el DBObject. Sin embargo, col es nulo porque no se inicializó en el constructor.
Para solucionar este problema, debes almacenar la referencia al objeto MongoClient en la variable de instancia mongoClient, y la referencia al objeto MongoCollection en la variable de instancia col. Puedes modificar el constructor de la siguiente manera:
Luego, en el método createPerson(), debes usar la referencia almacenada en col:
Esto debería solucionar el NullPointerException, ya que col ahora se inicializará correctamente y se accederá en el método createPerson().