JAVA 我有以下问题。 我有一个移动对象。
Calss object mobile
private ObjectId _id;
private String number;
private String nroMatricula;
获取和设置等
恢复MongoDB时。
String id = "5089e5fde4b07bf6f368366b";
DBObject soid = new BasicDBObject("_id", new ObjectId(id));
String s = MongoAccess.getSingleton().GetOneValueByKey("mobile", soid);
Mobile m = js.fromJson(s, Mobile.class);
public String GetOneValueByKey(String thecollection, DBObject key)
{
String result = null;
try {
DBCollection collection = MDB.getCollection(thecollection);
result = JSON.serialize(collection.findOne(key));
} catch (Exception e) {
Logger.getLogger(MongoAccess.class.getName()).log(Level.SEVERE, e.toString());
}
return result;
}
正确恢复数据但是_id属性。 我加载了数据库中的数据,但它生成了一个新的id。 这应该是正确的_id“5089e5fde4b07bf6f368366b”,但这不是对象的指控。 我可以帮忙。
答案 0 :(得分:2)
解决方案
JsonDeserializer<ObjectId> des = new JsonDeserializer<ObjectId>() {
@Override
public ObjectId deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException {
return new ObjectId(je.getAsJsonObject().get("$oid").getAsString());
}
};
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectId.class, des).create();