从DynamoDB获取值时如何编组/取消编组对象类型

时间:2016-11-04 06:25:16

标签: java amazon-dynamodb marshalling unmarshalling

我有一个DynamoDB表,其中有列。其中两个将始终具有相同的数据类型,而一个列的数据类型将有所不同。如何在使用DynamoDB时解组/编组它。以下是我的DTO。

private Integer id;
private String name;
private Object value;

不允许直接映射"值"现场并抛出异常。

请帮助我。

1 个答案:

答案 0 :(得分:1)

将字段声明为: -

@CustomObjectFormat(separator = " ")
    public Object getValue() {
        return value;
    }

示例CustomObjectFormat代码: -

以下实现使用toString()将所有内容转换为String,并在DynamoDB数据库中作为String数据类型保留。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DynamoDBTypeConverted(converter=CustomObjectFormat.Converter.class)
public @interface CustomObjectFormat {

    String separator() default " ";

    public static class Converter implements DynamoDBTypeConverter<String, Object> {

        private final String separator;

        public Converter(final Class<Currency> targetType, final CustomObjectFormat annotation) {
            this.separator = annotation.separator();
        }
        public Converter() {
            this.separator = "|";
        }
        @Override
        public String convert(final Object o) {
            return o.toString();
        }
        @Override
        public Object unconvert(final String o) {
            return o;
        }
    }
}

要保存的映射器: -

DynamoDBMapper将相应地调用自定义convertunconvert进行保存和检索。

dynamoDBMapper.save(accounts);

DynamoDBTypeConverted JavaDoc