Я использую jackson для чтения и записи объекта в локальный файл json.
Он успешно прочитал и записал значение. Но проблема в том, когда я читаю значение из файла. и назначить его моему объекту, это даст мне ошибку.
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.FeedItem
Я знаю причину ошибки, потому что для чтения значения из файловых jackons используйте LinkedHashMap Итак, LinkedHashMap не может быть преобразован в объект (FeedItem)
Вот что я использую.
PostFeed
public class PostFeed{
private String name;
private List<FeedItem> feeditemList;
// other code getter setter etc
}
Чтение значения из файла
ObjectMapper objectMapper = new ObjectMapper();
PostFeed postFeed = objectMapper.readValue(offlinePrivateFeed, PostFeed.class);
FeedItem feedItem = postFeed.getFeedList().get(0); // Error
Обновить значение записи в локальный файл
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(Utils.getOutputJsonFile("private-feed"), postFeed);
Я нашел аналогичный вопрос LinkedhashMap не может быть преобразован в модельную учетную запись Но этот вопрос бесполезен в моем случае. Почти я попробовал все ответы, но никто не решил мою проблему.
Не могли бы вы сообщить мне, как я могу решить эту проблему?
Обновление: FeedItem
public class FeedItem{
private String name;
private int badge;
private Boolean allow;
// other code getter setter etc
}
Обновление: файл JSON
{
"feedName": "test123",
"time" : "7-7-1994",
"feedList": [
{
"name": "feedItemName",
"badge": 4,
"allow": false
},
{
"name": "feedItemName",
"badge": 1,
"allow": true
},
{
"name": "feedItemName",
"badge": 2,
"allow": false
}
]
}
Обновление: решение
Эта проблема может быть решена путем преобразования LinkedHashMap в пользовательский объект FeedItem. Но вопрос в том, как мы можем преобразовать LinkedHashMap в Object?
Я хочу, чтобы я мог назначить LinkedHashMap своему объекту (FeedItem)?
эм ... нет. вы можете сопоставить содержимое своей LinkedHashMap
вы можете показать, как выглядит ваш локальный файл?
@Stultuske Я только хочу преобразовать LinkedHashMap в объект FeedItem
ты решил проблему @AzeemHaider




LinkedHashMap реализует карту, а не список
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html
Возможно, измените тип поля feeditemList на LinkedHashMap
Я не могу его изменить, потому что я использую библиотеку Google Cloud Endpoint, а FeedItem - это автоматически сгенерированный файл
Попробуйте этот код, если ваш объект PostFeed не равен нулю, тогда также feeditemList не пуст, а затем используется ниже кода ..
if (postFeed!=null && !postFeed.getFeedList().isEmpty()){
FeedItem feedItem = postFeed.getFeedList().get(0);
}
Братан, если ты читаешь мой вопрос, это не NullPointerExcdption, а ClassCastException
извините за это, я думаю, что ошибка в PostFeed postFeed = objectMapper.readValue (offlinePrivateFeed, PostFeed.class); эта строка не эта строка FeedItem feedItem = postFeed.getFeedList (). get (0);
вы можете отладить и проверить это.
Я знаю, где ошибка и что это за ошибка, потому что проблема в том, что я не знаю, как ее решить
Из локального файла я обновил свой вопрос, посмотрите, как я пишу значение в локальном файле
Попробуйте использовать это:
` public class PostFeed{
private String name;
private LinkedHashMap<FeedItem> feeditemList;
// private Map<FreedItem> freeditemlist
// or you can also do this
// other code getter setter etc
}`
потому что LinkedHashMap реализует Map not List
Как я уже комментирую, я не могу изменить этот файл, потому что это автоматически сгенерированный файл из облачного хранилища Google
хорошо, поэтому вам нужно преобразовать полученные данные в объект FeedItem
сначала попробуйте узнать, что вы получаете в postFeed.getFeedList (). get (0); получая его в поле типа объекта, чем вы можете соответственно использовать
Я получаю LinkedHashMap от postFeed.getFeedList().get(0) Передать это на FeedItem не работает та же ошибка
И в вашем коде LinkedHashMap требуются два параметра key и тип значения value, которые различаются для каждого элемента. проверить обновление
Итак, вы знаете причину ошибки ... что еще вы хотите, чтобы мы вам объяснили?