java.lang.ClassCastException:无法将java.util.LinkedHashMap强制转换为Specific类

时间:2014-04-03 17:40:32

标签: java mongodb jongo

我想拥有从MongoDB集合中插入和获取对象的通用方法。对于所有mongo db操作,我使用的是Jongo库。这是我的代码:

 public UserModel getUserByEmailId(String emailId) {
    String query = "{emailId:'"+emailId+"'}";
    Object obj = storage.get(query);

    UserModel user = (UserModel) obj; 
    //getting exception on above line. I am sure that I have UserModel 
    //type of data in obj
    // Exception is: java.lang.ClassCastException: Cannot cast java.util.LinkedHashMap to UserModel
    return user;
}

这是“storage.get(String query)”方法。我的目的是有一个从mongo db读取数据的常用方法。这就是我希望它返回Object的原因。 (如果我错了,请随意评论)

public Object get(String query) {
    Object obj = collection.findOne(query).as(Object.class);
    return obj;
}

//Here: collection is my "org.Jongo.MongoCollection" type object.

从“Object”获取UserModel类型对象的正确方法是什么?如果您需要更多信息,请告诉我

2 个答案:

答案 0 :(得分:0)

Jongo图书馆正在返回一张地图,特别是LinkedHashMap。您正在尝试将其转换为您的UserModel类的实例,Java不知道该怎么做。

您似乎期待Jongo库返回UserModel。假设这是您自定义设计的类,则库无法知道如何将MongoDB中的数据映射到此对象。当然,除非你能以某种方式特别指示它这样做(我不熟悉Jongo)。

但是,您可以使用Jackson将地图映射到UserModel(或其他对象)。

答案 1 :(得分:0)

如果您只需要将文档映射到UserModel对象

collection.findOne("{name:'John'}").as(UserModel.class);

如果您正在寻找通用方法:

public <T> T get(String query, Class<T> clazz) {
  return collection.findOne(query).as(clazz);
}
...
UserModel user = this.get("{name:'John'}", UserModel.class);