问题描述
我有一个扩展 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 (将#修改为@)