It'*_* me 1 java arraylist mongodb playframework
在我的 Java Play 框架应用程序中,我想将 ArrayList 值存储在 mongoDB 中。
我在 JSON 中有 3 个值,分别是 loginid、phone、students;在那个学生是ArrayList。我将数据存储在 mongoDB 中,如下所示:
{ "loginid" : "user@mail.com", "phone" : "0123456789", "students" : [{"firstName" : "Jesse", "lastName" : "Varnell", "age" : "15", "gender" : "M" }, { "firstName" : "John", "lastName" : "Doe", "age" : "13", "gender" : "F"}] }
Run Code Online (Sandbox Code Playgroud)
我正在使用 mongo 查询来存储如下值:
BasicDBObject searchQuery = new BasicDBObject();
BasicDBObject theUserObj = new BasicDBObject();
ArrayList<Student> student = new ArrayList<Student>();
if(studentArray != null && studentArray.size()>=0) {
Student stud = new Student();
for(int i = 0; i < studentArray.size(); i++){
stud = studentArray.get(i);
student.add(stud);
}
}
theUserObj.put("loginid", profile.loginid);
theUserObj.put("phone", profile.phone);
searchQuery.append("loginid", username);
theUserObj.put("students", student);
theUserCollection.update(searchQuery, theUserObj); //Got error on this line.
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Execution exception (In /app/controllers/StudentInfo.java around line 176)
IllegalArgumentException occured : can't serialize class models.Student
play.exceptions.JavaExecutionException: can't serialize class models.Student
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalArgumentException: can't serialize class models.Student
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:234)
at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:259)
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:198)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:140)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:86)
at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
at com.mongodb.OutMessage.putObject(OutMessage.java:142)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:346)
at com.mongodb.DBCollection.update(DBCollection.java:165)
at com.mongodb.DBCollection.update(DBCollection.java:197)
at com.mongodb.DBCollection.update(DBCollection.java:209)
at controllers.StudentInfo.doStoreProfile(StudentInfo.java:176)
at controllers.StudentInfo.storeUserProfile(StudentInfo.java:212)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
Run Code Online (Sandbox Code Playgroud)
如何使用 Java 在 MongoDB 中使用 ArrayList 存储值?
DBObject并且实现类只能处理 BSON 类型,而你的Student类不是。
有很多框架可以映射| 将域对象(例如 Student)转换为 | 来自 BSON 表示和文档。由于您显然不使用任何,因此您必须手动将每个转换Student为您DBObject自己。
BasicDBObject searchQuery = new BasicDBObject("loginid", username);
BasicDBObject theUserObj = new BasicDBObject();
List<Object> studentsDBList = new BasicDBList();
for (Student student : studentArray) {
DBObject studentDBObject = new BasicDBObject();
studentDBObject.put("firstName", student.getFirstName());
studentDBObject.put("lastName", student.getLastName());
studentDBObject.put("age", student.getAge());
studentDBObject.put("gender", student.getGender());
studentsDBList.add(studentDBObject);
}
theUserObj.put("phone", profile.phone);
theUserObj.put("students", studentsDBList);
theUserCollection.update(searchQuery, theUserObj);
Run Code Online (Sandbox Code Playgroud)
另外,请注意,您不必loginid放入theUserObj,因为您只是在查询它
| 归档时间: |
|
| 查看次数: |
10136 次 |
| 最近记录: |