2016-04-08 19 views
3

カスタムマーシャルを使用することで、enumクラスをDynamoDBオブジェクトにマッピングすることは本当に簡単です。しかしEnumのリストをどのようにマップするのですか?DynamoDBのマッピングEnumのリスト

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; 
    } 
} 

答えて

0

列挙型クラスは、私は答えを自分自身を発見しました。私は以下のようなカスタムマーシャルを作成します。

public class TransportMarshaller implements DynamoDBMarshaller<List<Transport>> { 

@Override 
public String marshall(List<Transport> transports) { 
    List<String>transportMap=new ArrayList<>(); 
    for(Transport transport:transports){ 
     transportMap.add(transport.name()); 
    } 
    return transportMap.toString().replaceAll("\\[|\\]", "");//Save as comma separate value for the purpose of easiness to unmarshall 
} 

@Override 
public List<Transport> unmarshall(Class<List<Transport>> aClass, String s) { 
    List<String>map= Arrays.asList(s.split("\\s*,\\s*")); //split from comma and parse to List 
    List<Transport>transports=new ArrayList<>(); 
    for (String st:map){ 
     transports.add(Transport.valueOf(st)); 
    } 
    return transports; 
} 
} 
3

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; 
} 
} 
関連する問題