java - Enum 的 DynamoDB 映射列表

标签 java enums sdk amazon-dynamodb

使用 Custom Marshall 将枚举类映射到 DynamoDB 对象非常简单。但是如何映射枚举列表?

枚举类

public enum Transport {
SMS,EMAIL,ALL;
}

DynamoDB 映射器

public class Campaign{
   private List<Transport> transport;

   @DynamoDBAttribute(attributeName = "transport")
   public List<Transport> getTransport() {
       return transport;
   }

   public void setTransport(List<Transport> transport) {
      this.transport = transport;
   }
}

最佳答案

DynamoDBMarshaller 已弃用。 请改用 DynamoDBTypeConverter。

例子:

枚举类

public static enum ValidationFailure {
    FRAUD, GENERAL_ERROR
}

DynamoDBTable 类

 @DynamoDBTable(tableName = "receipt")
public class Receipt {

    private Long id;
    private List<ValidationFailure> validation;

    @DynamoDBHashKey(attributeName = "id")
    public Long getId() {
        return id;
    }

    @DynamoDBTypeConverted(converter = ValidationConverter.class)
    public List<ValidationFailure> getValidation() {
        return validation;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setValidation(List<ValidationFailure> validation) {
        this.validation = validation;
    }
}

转换器:

public class ValidationConverter implements DynamoDBTypeConverter<List<String>, List<ValidationFailure>> {

@Override
public List<String> convert(List<ValidationFailure> object) {
    List<String> result = new ArrayList<String>();
    if (object != null) {
        object.stream().forEach(e -> result.add(e.name()));
    }
    return result;
}

@Override
public List<ValidationFailure> unconvert(List<String> object) {
    List<ValidationFailure> result = new ArrayList<ValidationFailure>();
    if (object != null) {
        object.stream().forEach(e -> result.add(ValidationFailure.valueOf(e)));
    }
    return result;
}
}

关于java - Enum 的 DynamoDB 映射列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36495898/

相关文章:

Java g.dispose 不清除屏幕

java - 将 Jersey 1.8 更新到 1.10+ 会导致 ClassNotFoundException : com. sun.jersey.server.impl.cdi.AnnotatedCallableImpl

java - 在构造调用期间将 Java 枚举放入静态映射中是否安全?

Python enum34 按名称访问

command-line - 如何通过命令行为 iOS 开发安装开发人员证书/私钥和配置文件?

javascript - 声音 javascript SDK 似乎不返回 soundmanager 对象

java - Eclipse Maven : SLF4J: Class path contains multiple SLF4J bindings

mysql - 比较两个 SQL 条目的枚举索引

php - facebook api很慢

java - tomcat中的Realm资源和context.xml