使用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: 无法实例化课程 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
任何帮助将不胜感激。
答案 0 :(得分:2)
DynamoDBMapper期望一个带有空构造函数的类。使用Kotlin数据类,可以为所有参数指定默认值,并使用@JvmOverload,这将为JVM(Java)生成空的构造函数。另外,所有参数都必须是可变的,因此您需要使用“ var”而不是“ val”。
@DynamoDBTable(tableName = "Test")
data class TestItem @JvmOverloads constructor(
@DynamoDBHashKey(attributeName="someKey")
var someKey: String = "",
var someValue: String = ""
)
答案 1 :(得分:0)
如果您使用的是lombok Builder,请尝试以下操作
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
DynamoDBTable(tableName = "Test")
public class TestItem {
@DynamoDBHashKey(attributeName="someKey")
var someKey: String = "",
}