Dynamodb 属性转换器提供程序,用于扩展 Hashmap 的增强类型

问题描述

我有一个扩展 HashMap<String,String> 的类型。根据文档 here,可以为该类型添加自定义转换器。但它似乎不起作用。 hashMap内容没有被转换,输出如下所示;

"summary": {
  "en": null
},

知道如何转换 Label 及其字段及其哈希图的内容吗?

家长

@DynamoDbBean(converterProviders = {
    CustomAttributeConverterProvider.class,DefaultAttributeConverterProvider.class})
public class Summary extends BaseEntry  {

  private @Valid Label summary = null;

}

孩子

@DynamoDbBean(converterProviders = {
    CustomAttributeConverterProvider.class,DefaultAttributeConverterProvider.class})
public class Label extends HashMap<String,String>  {
  private @Valid String en = null;
}

HashMapAttributeConverter

public class HashMapAttributeConverter implements AttributeConverter<Map<String,String>> {
  private static AttributeConverter<Map<String,String>> mapConverter;

  /** Default constructor. */
  public HashMapAttributeConverter() {
    mapConverter =
        MapAttributeConverter.builder(EnhancedType.mapOf(String.class,String.class))
            .mapConstructor(HashMap::new)
            .keyConverter(StringStringConverter.create())
            .valueConverter(StringAttributeConverter.create())
            .build();
  }

  @Override
  public AttributeValue transformFrom(Map<String,String> input) {
    return mapConverter.transformFrom(input);
  }

  @Override
  public Map<String,String> transformTo(AttributeValue input) {
    return mapConverter.transformTo(input);
  }

  @Override
  public EnhancedType<Map<String,String>> type() {
    return mapConverter.type();
  }

  @Override
  public AttributeValueType attributeValueType() {
    return mapConverter.attributeValueType();
  }
}

CustomAttributeConverterProvider

public class CustomAttributeConverterProvider implements AttributeConverterProvider {

  private final List<AttributeConverter<?>> customConverters =
      Arrays.asList(new HashMapAttributeConverter());

  private final Map<EnhancedType<?>,AttributeConverter<?>> customConvertersMap;
  private final AttributeConverterProvider defaultProvider =
      DefaultAttributeConverterProvider.create();

  public CustomAttributeConverterProvider() {
    customConvertersMap =
        customConverters.stream().collect(Collectors.toMap(AttributeConverter::type,c -> c));
  }

  @Override
  public <T> AttributeConverter<T> converterFor(EnhancedType<T> enhancedType) {
    return (AttributeConverter<T>)
        customConvertersMap.computeIfAbsent(enhancedType,defaultProvider::converterFor);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)