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
Другие вопросы по тегам