Загрузка DynamoDBMapper не может создать экземпляр класса данных Kotlin - PullRequest
0 голосов
/ 28 июня 2018

Используя DynamoDBMapper в AWS Lambda (т.е. не в Android), написанном на Kotlin, я могу сохранить запись, используя класс данных. Однако, когда я пытаюсь загрузить запись в класс данных, я получаю исключение «DynamoDBMappingException: не удалось создать экземпляр класса».

@DynamoDBTable(tableName = "Test")
data class TestItem(
    @DynamoDBHashKey(attributeName="someKey")
    @DynamoDBAttribute(attributeName = "someKey")
    var someKey: String?,

    @DynamoDBAttribute(attributeName = "someValue")
    var someValue: String?
}

val ddbMapper = DynamoDBMapper(AmazonDynamoDBClientBuilder.defaultClient())
ddbMapper.load(TestItem::class.java, "xyz")

Результат в следующем исключении:

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: не мог создать экземпляр класса com.intuit.connect_to_pro.lambda_common_core.aws_service.TestItem

С исключением из корневого каталога:

java.lang.NoSuchMethodException: com.intuit.connect_to_pro.lambda_common_core.aws_service.TestItem. ()

В AWS есть пример для Android, который использует com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper вместо com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper. Я попробовал версию для Android, но результат был тот же.

https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 июня 2018

DynamoDBMapper ожидает класс с пустым конструктором. Используя класс данных Kotlin, вы можете указать значения по умолчанию для всех параметров и использовать @JvmOverload, который сгенерирует пустой конструктор для JVM (Java). Также все параметры должны быть изменяемыми, поэтому вам нужно использовать «var» вместо «val».

@DynamoDBTable(tableName = "Test")
data class TestItem @JvmOverloads constructor(

   @DynamoDBHashKey(attributeName="someKey")
   var someKey: String = "",

   var someValue: String = ""
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...