0

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”,但这不是对象的费用。我可以搭把手。

4

1 回答 1

3

解决方案

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();
于 2012-10-31T17:18:42.213 回答