DynamoDB + Quarkus - 奇数类型转换

DynamoDB + Quarkus - Odd type conversion

我在 DynamoDB 上有一个 table / 实体,应该用数字作为字段进行映射。

示例:

@RegisterForReflection
Foo {
     Integer myfield;
     ...
}

我注意到 quarkus-amazon-dynamodb 依赖使用的 AWS SDK 是以一种奇怪的方式构建的。

例如software.amazon.awssdk.services.dynamodb.model.AttributeValue

的n()方法

return 一个 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();

我错过了什么吗?

PS

Quarkus dynamoDB 文档是 here

这并不奇怪 - 这就是 AWS DynamoDB 的工作原理。数字在 DynamoDB 中表示为字符串,而 Quarkus 与此无关。见 API reference:

N
An attribute of type Number. For example:

"N": "123.45"

Numbers are sent across the network to DynamoDB as strings, to maximize compatibility across languages and libraries. However, DynamoDB treats them as number type attributes for mathematical operations.

Type: String