gpt4 book ai didi

java - 如何将 Java 枚举与 Amazon DynamoDB 和 AWS SDK v2 结合使用?

转载 作者:行者123 更新时间:2023-12-02 16:05:11 27 4
gpt4 key购买 nike

我正在尝试为 AWS 实现一个简单的 java 事件处理程序 lambda。它接收 sqs 事件并应该对 dynamoDB 表进行适当的更新。

此表中的属性之一是具有 4 个已定义状态的状态字段;因此我想在 java 中使用枚举类并将其映射到该属性。

在 AWS SDK v1 下,我可以使用 @DynamoDBTypeConvertedEnum 注释。但它在 v2 中不再存在。相反,有 @DynamoDbConvertedBy() 接收转换器类引用。还有一个 EnumAttributeConverter 类应该可以很好地与它一起工作。

但由于某种原因,它不起作用。以下是我当前代码的一个片段:

@Data
@DynamoDbBean
@NoArgsConstructor
public class Task{

@Getter(onMethod_ = {@DynamoDbPartitionKey})
String id;

...

@Getter(onMethod_ = {@DynamoDbConvertedBy(EnumAttributeConverter.class)})
ExportTaskStatus status;
}

枚举如下所示:

@RequiredArgsConstructor
public enum TaskStatus {
@JsonProperty("running") PROCESSING(1),
@JsonProperty("succeeded") COMPLETED(2),
@JsonProperty("cancelled") CANCELED(3),
@JsonProperty("failed") FAILED(4);

private final int order;
}

有了这个,我在启动应用程序时遇到以下异常:

Class 'class software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.EnumAttributeConverter' appears to have no default constructor thus cannot be used with the BeanTableSchema

最佳答案

对于来到这里的任何其他人来说,在我看来,只要从枚举中删除注释就可以正常工作,即 SDK 隐式应用提供的属性转换器。这个Github issue里面也提到了.我自己的类看起来像这样(Brand 在这里是一个枚举),并且在获取项目时枚举被转换没有任何问题。

@Value
@Builder(toBuilder = true)
@DynamoDbImmutable(builder = User.UserBuilder.class)
public class User {

@Getter(onMethod = @__({@DynamoDbPartitionKey}))
String id;

Brand brand;
...
}

关于java - 如何将 Java 枚举与 Amazon DynamoDB 和 AWS SDK v2 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69615058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com