java.lang.ClassCastException: Невозможно привести java.util.LinkedHashMap к определенному классу.
Я хочу иметь общий метод для вставки и получения объектов из коллекции 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)". Мое намерение состоит в том, чтобы иметь общий метод для чтения данных из Монго БД. Вот почему я хочу вернуть объект. (Не стесняйтесь комментировать, если я не прав)
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 из "Объекта"? Дайте мне знать, если вам нужно больше информации
2 ответа
Если вам нужно только сопоставить документы с объектами 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);
Библиотека Jongo возвращает карту, в частности LinkedHashMap
, Вы пытаетесь привести это к экземпляру вашего UserModel
класс, который Java не знает, как это сделать.
Вы, кажется, ожидаете, что библиотека Jongo вернет UserModel
, Предполагая, что это ваш специально разработанный класс, библиотека не сможет узнать, как сопоставить данные из MongoDB с этим объектом. Если, конечно, вы не могли бы как-то конкретно проинструктировать его об этом (я не знаком с Джонго).
Однако вы можете использовать Джексона, чтобы отобразить карту на UserModel
(или другие объекты).