使用 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/