使用 dynamoEnhanced 客户端时,名称以“is”开头的属性未存储在 DynamoDb 中

问题描述 投票:0回答:1

我正在使用新属性更新我们的一个 dynamoDb 实体,其中一个新属性称为 isEnabled,它是一种字符串类型,此数据不会存储在 dynamoDB 中,这是实体对象的示例

@NoArgConstructor
@DynamoDbBean
@DynamoDbTableName(tableName = "tableName")
data class DynamoEntity (
.....
    @get:DynamoDbAttribute("isEnabled")
    var isEnabled: String,
....
) {
.....
}

我发现,如果属性类型是布尔值,它就可以正常工作,而且如果我像这样更新数据类中的属性名称,它也可以正常工作。


@NoArgConstructor
@DynamoDbBean
@DynamoDbTableName(tableName = "tableName")
data class DynamoEntity (
.....
    @get:DynamoDbAttribute("isEnabled")
    var enabled: String,
....
) {
.....
}

我找不到任何相关文档,这是预期的行为吗?

我尝试更新布尔值和字符串之间的数据类型也尝试使用不同的名称

java kotlin amazon-dynamodb javabeans
1个回答
0
投票

DynamoDbBean
只能用于符合 JavaBeans 规范 的类,而您的类不符合。

根据规范(8.3.1 简单属性),非布尔属性的 getter 应该以

get
为前缀,并且
is
只允许作为
boolean
属性的额外前缀。这就是为什么当您将数据类型更改为
boolean
时它会起作用,而当您将其更改回
string
时它会停止工作。

增强型客户端很可能使用反射从 getter 和 setter 方法推断属性名称和值,并在向 DynamoDB 读取或写入数据时调用这些方法 - 不遵守规范会导致该过程出现问题。

按照 JavaBeans 规范,将属性更改为

boolean
或使用
get

© www.soinside.com 2019 - 2024. All rights reserved.