kotlin - DynamoDBMapper 加载无法实例化 Kotlin 数据类

标签 kotlin aws-lambda amazon-dynamodb

在用 Kotlin 编写的 AWS Lambda(即不是 Android)中使用 DynamoDBMapper,我可以使用数据类保存记录。但是,当我尝试将记录加载到数据类时,我收到“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: could not instantiate class com.intuit.connect_to_pro.lambda_common_core.aws_service.TestItem



根异常(exception)是:

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

任何帮助,将不胜感激。

最佳答案

DynamoDBMapper 需要一个带有空构造函数的类。使用 Kotlin 数据类,您可以为所有参数指定默认值并使用 @JvmOverload,它将为 JVM (Java) 生成空构造函数。此外,所有参数都需要可变,因此您需要使用“var”而不是“val”。

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

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

   var someValue: String = ""
)

关于kotlin - DynamoDBMapper 加载无法实例化 Kotlin 数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073135/

相关文章:

swift - 即使对象存在,DynamoDB 查询每次都返回 nil

node.js:创建表时如何在 DynamoDB 中添加非键属性?

android - Varargs Kotlin Java 互操作无法正常工作

android - 数组的预期开始 '[' ,但有 'EOF' 而不是

java - Kotlin 对象类实例 get()

amazon-web-services - AWS Lambda : how to set the error type?

amazon-web-services - AWS DynamoDB Scan filterExpression - 简单的数字比较

android - 无法解析库模块中的 Kotlin Android 扩展布局

aws-lambda - Serverless.com/CloudFormation : Properties "Retry attempts", "Maximum age of record"未在 AWS Lambda EventSource 上设置映射到 DynamoDB 流

node.js - AWS Lambda Nodejs环境要求不一致