【问题标题】:java.lang.ClassCastException: Cannot cast java.util.LinkedHashMap to Specific classjava.lang.ClassCastException:无法将 java.util.LinkedHashMap 转换为特定类
【发布时间】:2014-04-03 17:40:32
【问题描述】:

我想有一个通用的方法来从 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.

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

【问题讨论】:

    标签: java mongodb jongo


    【解决方案1】:

    如果您只需要将文档映射到 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);
    

    【讨论】:

      【解决方案2】:

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

      您似乎希望 Jongo 库返回 UserModel。假设这是您自定义设计的类,那么库无法知道如何将数据从 MongoDB 映射到该对象。当然,除非你能以某种方式明确指示它这样做(我不熟悉 Jongo)。

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

      【讨论】:

      • 嗨乔瓦尼,你能给我一些链接,我可以找到一些从 LinkedHashMap 检索类对象的示例代码
      • 什么意思?将地图转换为对象?杰克逊就是为此而生的。
      • @BenoitGuerout 这应该会让事情变得更容易。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多