我见过this question关于创建一个通用的DynamoDBMarshaller类,它可以用来编组任何Enum类。但是,这对于Enums列表不起作用。
我知道我可以编写一个处理Enums列表的编组器,但我必须将它作为字符串写入dynamo(基本上是jsonify列表)。这不是理想的。对于其他类类型,可以使用@DynamoDBDocument
进行注释,但这不适用于枚举类型。
那么,有没有办法将我的Enum类编组为dynamo中的字符串列表?
答案 0 :(得分:0)
我相信你需要指定你想要序列化的确切枚举类(并且不能做一些通用的)。然后,您可以使用Jackson等库为您进行序列化:
package com.example.shared.models.marshallers;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshaller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.type.CollectionType;
import java.util.List;
public class EnumListMarshaller implements DynamoDBMarshaller<List<ENUM_NAME>> {
private static final ObjectMapper mapper = new ObjectMapper();
private static final ObjectWriter writer = mapper.writer();
@Override
public String marshall(List<ENUM_NAME> obj) {
try {
return writer.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException("Failed to marshall list of enums to dynamo");
}
}
@Override
public List<ENUM_NAME> unmarshall(Class<List<ENUM_NAME>> clazz, String json) {
final CollectionType type = mapper.getTypeFactory().constructCollectionType(List.class, ENUM_NAME.class);
try {
return mapper.readValue(json, type);
} catch (Exception e) {
throw new RuntimeException("Failed to unmarshall list of enums from dynamo");
}
}
}
然后在你的DAO中,你会添加注释:
@DynamoDBMarshalling(marshallerClass = EnumListMarshaller.class)
“ENUM_NAME”是您的枚举类。