我的简单应用程序假设只是用 _id
到 user
之间的映射填充 MongoDB。我的key(_id
)是JSON格式的,它的值只是一个long。
{
"_id": {
"a": "1B2ac",
"b": "Windows NT 5.2; WOW64; rv:16.0 Ff/6.0"
},
"user": 1999129
}
我有几个问题:
问题 1:当我尝试插入时,我得到 can's serialize class...
:
Caused by: java.lang.IllegalArgumentException: can't serialize class test.mongo.foo.DummyObject
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:234)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:121)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:86)
at com.mongodb.OutMessage.putObject(OutMessage.java:190)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:253)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:217)
at com.mongodb.DBCollection.insert(DBCollection.java:102)
at com.test.mongo.foo.DaoImpl.insertRecords(DaoImpl.java:130)
这是我的 DummyObject
类(它实现了 Serializable
):
package test.mongo.foo;
import java.io.Serializable;
public class DummyObject implements Serializable{
private static final long serialVersionUID = -2715467675581503964L;
//default constructor
public DummyObject(){
}
private String a;
private String b;
public String getA() {
return a;
}
public String getB() {
return b;
}
public void setA(String a) {
this.a = a;
}
public void setB(String b) {
this.b = b;
}
}
这是我的DaoImp
类
package test.mongo.foo;
public class DaoImpl extends MongoDAOImpl{
public int insertRecords(List<DBObject> records) {
DBCollection coll = getDBCollection();
Exception e = null;
try {
WriteResult res = coll.insert(records);
if (res.getError() != null) {
throw new MongoRuntimeException(res.getError());
}
return res.getN();
} catch (Exception err) {
e = err;
throw new MongoRuntimeException(err);
}
}
public static DBObject convertToDBObject(DummyObject obj, long value) {
DBObject bdbo = new BasicDBObject();
bdbo.put("_id",obj);
bdbo.put("user",value);
return bdbo;
}
public static void main(String [] args){
DummyObject d = new DummyObject();
d.setA("1B2ac");
d.setB("Windows NT 5.2; WOW64; rv:16.0 Ff/6.0");
long val = 1999129;
List<DBObject> l = new ArrayList<DBObject>();
l.add(DaoImpl.convertToDBObject(d,val));
DaoImpl impl = new DaoImpl();
}
}
问题 2: 为了避免上述问题,我尝试插入带有字符串到字符串映射的记录。虽然我的输入字符串(对于 _id
)没有转义,DBObject
在内部转义它并最终写入 MongoDB,如下所示:
{
"_id": {
\"a\": \"1B2ac\",
\"b\": \"WindowsNT5.2;WOW64;rv: 16.0Ff/6.0\"
},
"user": NumberLong(1999129)
}
代替
{
"_id": {
"a": "1B2ac",
"b": "Windows NT 5.2; WOW64; rv:16.0 Ff/6.0"
},
"user": 1999129
}
关于如何解决这两个问题有什么建议吗?非常感谢任何指点。
最佳答案
没关系。在玩了一会儿之后,我找到了自己问题的答案。作为 JsonObject 插入。我将 DummyObject 转换为 JsonObject/Object(提示:Json.parse(jstr))
谢谢 马斯蒂
关于java - 无法序列化 MongoDB 中的类 Java 和字符串被编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124543/