当我在mongodb中插入一个List时,有一个问题:
Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class mongodb.Person
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.insert(DBApiLayer.java:252)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:211)
at com.mongodb.DBCollection.insert(DBCollection.java:57)
at com.mongodb.DBCollection.insert(DBCollection.java:87)
at com.mongodb.DBCollection.save(DBCollection.java:716)
at com.mongodb.DBCollection.save(DBCollection.java:691)
at mongodb.MongoDB.main(MongoDB.java:45)
Person类的定义如下:
class Person{
private String name;
public Person(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
该方案是:
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);
我在google上找不到答案,请帮帮我。
8条答案
按热度按时间bkhjykvo1#
只需在Person类中实现Serializable接口。
在你的类中定义一个
serialVersionUID
也是很好的。AFAIK,在java中创建POJO类时,类应该是可序列化的,如果它要通过一些流传输,有一个默认的构造函数,并允许使用getter和setter方法访问属性/字段。
你可能有兴趣阅读这个:Discover the secrets of the Java Serialization API
3j86kqsm2#
我在使用mongodb时也遇到了同样的异常。我试着让这个有问题的类序列化,但这并没有解决我的问题。
以下是为我工作的。将类扩展为BasicDBObject的子级。当然,只有当问题是由MongoDB引起的时候,这才有效。
原始来源
http://techidiocy.com/cant-serialize-class-mongodb-illegal-argument-exception/#comment-1298
uurv41yg3#
类Person应该实现
java.io.Serializable
接口。class Person implements Serializable
dldeef674#
你的
Person
类定义需要有implements Serializable
才能序列化,例如:以下是一些关于Java对象序列化的有用链接:链接,Link。
6yjfywim5#
这里的问题不在于“实现可序列化”。问题是该对象未在DBObject中转换。
可能的解决方案:
gjmwrych6#
你可以通过使用以下代码来实现这一点:
现在,在mongodb代码中,可以序列化Person列表,如下所示
3vpjnl9f7#
下面是使Employee对象序列化的代码示例:
pprl5pva8#
首先,你应该知道为什么要使类可序列化?每当你想把网络上的对象移动到文件、数据库、网络、进程或任何其他系统。在java中简单实现。只需实现可串行化接口。