我正在用新属性更新我们的一个DynamoDB实体.

其中一个新属性称为isEnabled,其类型为String.

它不会存储在DynamoDB中.

以下是Entity对象的示例:

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

如果我将类型更改为Boolean,它就可以工作.

如果我这样更新属性名称,它也会起作用:

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

我找不到任何与此相关的文档,也找不到以is开头的属性名称是否有问题.

这是预期中的行为吗?

推荐答案

DynamoDbBean应该只用于符合JavaBeans specification的类(也提到了here)&您的类不是这样的.

根据规范(8.3.1 Simple properties),非布尔属性的getter应该以get为前缀,并且只允许is作为boolean个属性的额外前缀.这就是为什么当您将数据类型更改为boolean时,它可以工作,而当您将其更改回string时,它将停止工作.

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

以下任一项:

  • 将属性更改为boolean
  • 根据JavaBeans规范,使用get
  • 创建自定义AttributeConverterProvider实现(example)

Java相关问答推荐

H2弹簧靴试验跌落台

使用REST客户端和对象映射器从字符串反序列化Json

将带有js文件的 bootstrap 程序导入maven项目时出错

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

暂停计时器

Jakarta CDI强制bean构造/注册遗留事件侦听器

计算两个浮点数之间的距离是否对称?

什么是Java原子属性的正确getter和setter

无法使用Java&;TestContainers获取AWS SQS队列的属性

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

尽管通过中断请求线程死亡,但线程仍将继续存在

使用多个RemoteDatabase对象的一个线程

当构造函数创建一个新实例时,Java为什么需要&new";

Regex以查找不包含捕获组的行

Dijkstra搜索算法的实现

如何制作回文程序?

我们可以在方法中声明接口吗?

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

如何使用带有可选参数的类生成器?

什么是;u〃;平均值;jdku;在java开发工具包中?