com.fasterxml.jackson.databind.node.IntNode не может быть приведен к com.fasterxml.jackson.databind.node.ObjectNode
Я пытаюсь изучить DynamoDb и пытаюсь загрузить данные из json в таблицу, используя пример из руководства разработчика Amazon, но я получаю следующее исключение:
com.fasterxml.jackson.databind.node.IntNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
в нижней строке:
currentNode = (ObjectNode) iter.next();
Можете ли вы предложить мне, что я делаю здесь не так.
Также, пожалуйста, дайте мне знать, есть ли способ использовать графический интерфейс для просмотра содержимого моей таблицы. Я использую DynamoDbLocal с использованием Maven в моем проекте.
Спасибо,
2 ответа
Проблема была в моем файле json. Я использовал json во входном файле, например так:
{
"year" : "2013",
"title" : "Turn It Down, Or Else!",
"info" : {
"directors" : [
"Alice Smith",
"Bob Jones"
],
"release_date" : "2013-01-18T00:00:00Z",
"rating" : "6.2",
"genres" : [
"Comedy",
"Drama"
],
"image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
"plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
"rank" : "11",
"running_time_secs" : "5215",
"actors" : [
"David Matthewman",
"Ann Thomas",
"Jonathan G. Neff"
]
}
}
Пока мой код ожидал так:
[
{
"year" : "2013",
"title" : "Turn It Down, Or Else!",
"info" : {
"directors" : [
"Alice Smith",
"Bob Jones"
],
"release_date" : "2013-01-18T00:00:00Z",
"rating" : "6.2",
"genres" : [
"Comedy",
"Drama"
],
"image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
"plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
"rank" : "11",
"running_time_secs" : "5215",
"actors" : [
"David Matthewman",
"Ann Thomas",
"Jonathan G. Neff"
]
}
}
]
ObjectNode
не является потомком IntNode
поэтому вы не можете привести IntNode к ObjectNode. Вы должны привести эту конкретную строку кода к IntNode
:
IntNode currentNode = (IntNode) iter.next();
или к любому суперклассу IntNode
:
JsonNode currentNode = (JsonNode) iter.next();
Это иерархия ObjectNode
java.lang.Object*
com.fasterxml.jackson.databind.JsonSerializable.Base*
com.fasterxml.jackson.databind.JsonNode*
com.fasterxml.jackson.databind.node.BaseJsonNode*
com.fasterxml.jackson.databind.node.ContainerNode<ObjectNode>
com.fasterxml.jackson.databind.node.ObjectNode
и это иерархия для IntNode
java.lang.Object*
com.fasterxml.jackson.databind.JsonSerializable.Base*
com.fasterxml.jackson.databind.JsonNode*
com.fasterxml.jackson.databind.node.BaseJsonNode*
com.fasterxml.jackson.databind.node.ValueNode
com.fasterxml.jackson.databind.node.NumericNode
com.fasterxml.jackson.databind.node.IntNode
Я добавил * близко к обычным суперклассам, которые вы можете использовать для приведения к более универсальному типу, который может включать в себя оба IntNode
а также ObjectNode
,
Обратите внимание, что вам также необходимо изменить тип переменной currentNode
в соответствии с актерским составом, если это необходимо.
Но что странно, так это то, что вам нужно пойти на такой глубокий уровень, используя Джексона. Почему бы вам не преобразовать данные, хранящиеся в DynamoDb, в виде bean-компонента, если у вас нет предопределенной структуры для ваших данных (и поэтому вы еще не определили bean-компонент для их размещения), вы также можете использовать Map
,
Есть функции библиотеки Java DynamoDB, которые делают это автоматически, например, вы можете использовать код, подобный следующему:
Table table = getDynamoDB().getTable("yourTable");
Item item = table.getItem("id", "yourId");
Map map = item.asMap();
// map is holding in java the data present on Dynamodb
// in the table yourTable with id yourId