【发布时间】:2020-10-17 07:34:51
【问题描述】:
我有一个成员字段,使用 DynamoDB Java Mapper 转换时遇到问题。
@DynamoDBTypeConverted(converter = MyEnumBooleanConverter.class)
@DynamoDBAttribute(attributeName = "enumMap")
private Map<MyEnum, Boolean> enumMap;
MyEnumBooleanConverter 看起来像:
public class MyEnumBooleanConverter implements
DynamoDBTypeConverter<Map<String, Boolean>, Map<MyEnum, Boolean>> {
@Override
public Map<String, Boolean> convert(Map<MyEnum, Boolean> unconvertedMap) {
return CollectionUtils.emptyIfNull(unconvertedMap.entrySet()).stream()
.collect(Collectors.toMap(entry -> entry.getKey().toString(), Map.Entry::getValue));
}
@Override
public Map<MyEnum, Boolean> unconvert(Map<String, Boolean> convertedMap) {
return CollectionUtils.emptyIfNull(convertedMap.entrySet()).stream().collect(Collectors.toMap(
entry -> MyEnum.valueOf(entry.getKey()), Map.Entry::getValue));
}
}
转换器序列化一切正常,但是当我进行更新时,它会将我的映射从 BOOL 转换为 N 并以这种方式保存。
有什么方法可以确保我的自定义 DynamoDBTypeConverter 保持 DynamoDB BOOL 类型?我只看到 @DynamoDBTyped(DynamoDBMapperFieldModel.DynamoDBAttributeType.BOOL) 字段注释,但不是自定义转换器。
我希望有人之前使用布尔值创建了一个自定义转换器并遇到了这个问题。让我知道您是否可以提供帮助!
只是一些额外的细节: 翻看源码,貌似最终还是使用了V2CompatibleBool AbstractRule,而不是NativeBool规则。
【问题讨论】:
标签: java amazon-dynamodb