DynamoDB + Quarkus - 奇数类型转换
Posted
技术标签:
【中文标题】DynamoDB + Quarkus - 奇数类型转换【英文标题】:DynamoDB + Quarkus - Odd type conversion 【发布时间】:2022-01-18 12:41:15 【问题描述】:我在 DynamoDB 上有一个表/实体,应该用数字作为字段进行映射。
例子:
@RegisterForReflection
Foo
Integer myfield;
...
我注意到 quarkus-amazon-dynamodb 依赖项使用的 AWS 开发工具包是以一种奇怪的方式构建的。
例如software.amazon.awssdk.services.dynamodb.model.AttributeValue的n()方法
返回 java String 而不是 Number 类型,所以我必须用笨拙的 Integer.parseInt()
public static Foo from(Map<String, AttributeValue> item)
final var output = new Foo();
if (item != null && !item.isEmpty())
output.setMyField(Integer.parseInt(item.get(MY_FIELD).n()));
return output;
如果我必须获取一个项目并使用,也会发生同样的情况
AttributeValue.builder().n()
final Map<String, AttributeValue> key = new HashMap<>();
key.put(Foo.MY_FIELD, AttributeValue.builder().n(input.toString()).build()); // too bad!!
return GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(key)
.attributesToGet(Foo.MY_FIELD)
.build();
我错过了什么吗?
附言
Quarkus dynamoDB 文档是here
【问题讨论】:
【参考方案1】:这并不奇怪 - 这正是 AWS DynamoDB 的工作原理。数字在 DynamoDB 中表示为字符串,而 Quarkus 与此无关。见API reference:
N Number 类型的属性。例如:
“N”:“123.45”
数字作为字符串通过网络发送到 DynamoDB,以 最大限度地提高跨语言和库的兼容性。然而, DynamoDB 将它们视为数学的数字类型属性 操作。
类型:字符串
【讨论】:
以上是关于DynamoDB + Quarkus - 奇数类型转换的主要内容,如果未能解决你的问题,请参考以下文章
Quarkus 找不到内容类型多部分/表单数据休息客户端的编写器