当前位置: 首页 > 知识库问答 >
问题:

使用DynamoDB注释的Lombok注释

竺展
2023-03-14

我有一把刀:

    @Getter
    @Setter
    @DynamoDBTable(tableName="tableName")
    public class DAO {
        @DynamoDBHashKey
        private String field1;

        @DynamoDBIndexHashKey(globalSecondaryIndexName="index_name")
        @DynamoDBRangeKey
        private String field2;
    }

问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?

共有1个答案

邢飞雨
2023-03-14

这里是一个多一点的解释和一个TL;博士

您正在调用load方法,该方法映射到GetItem调用。DynamoDBMapper试图根据注释映射该请求。类具有@DynamoDBRangeKey注释,并且GetItem调用需要完整的主键来获取项,这意味着映射器将为对象构建主键。

由于Lombok已经生成了您的代码(在运行时之前),它不会影响您已经放置的注释。而且,由于您的注释是在字段上,而不是将它们应用于getter,所以它调用的映射器是生成的Lombok getter。但是,当getter尝试序列化到请求时,它会返回null,因为您只设置了hashKey。

TL;DR:load()转换为GetItemAPI,它需要hashKey和rangeKey,因为这两个注释都存在于类中。

 类似资料:
  • 我使用AWS加密客户端。下面的代码抛出错误为 错误:@DoNotTouch不适用于现场 然而,如果我给出@DoNotTouch配置,如下所示[使用getter和setter] 这很好用。我猜lombok生成的getter和setter不会被AmazoneCryptionClient识别 我在跟踪这个aws doc:https://aws.amazon.com/blogs/developer/cli

  • 我试图在Ubuntu 16.04 LTS上使用STS 3.9.4创建一个测试项目,Java8和Lombok 1.16.20。 安装了“龙目1.16.20版”跳舞象形文字。“”通常显示在“关于”选项卡上。 我尝试过的程序: 运行龙目岛。jar并通过GUI进行安装 还有其他解决方法吗?

  • 在我的项目代码库中,我看到许多地方使用了生成的注释。当我通读这些文件时,它说明了以下内容。 Lombok最终会自动将此注释添加到所有生成的构造函数、方法、字段和类型中。 根据文档,Lombok会自动为生成的代码添加注释。除此之外,不会生成任何像或这样的代码。我看不出使用它的理由。 我错过什么了吗?

  • 我喜欢使用Lombok,但它需要在IDEs设置中启用注释处理器。因为开发人员使用不同的IDE,CI/CD有自己的编译流程,而且我真的不想解释初级开发人员为什么需要选中此复选框,我正在寻找一种方法来避免选中此复选框。理想的情况下,我想让一个年轻人来运行git clone,然后/格拉德卢跑。Gradle是否可以完全设置注释处理器(无需手动单击)? 如果它能在比IntelliJ IDEA更多的地方工作,

  • 我试图在嵌套对象中使用DynamoDB注释,如下所示: 我没有看到上面的属性是在UserAction类中自动生成的。我想知道嵌套对象中是否支持这些注释用法。请建议。

  • 我最近开始在我的项目中使用。在lombok文档中,指定注释可以配置为抛出或。指定默认情况下将抛出。还指定要抛出,我应该设置。但是,我不明白应该在哪里指定` 请帮帮我。非常感谢。