Java DynamoDBMarshaller到枚举列表的字符串列表
我已经了解了如何创建一个通用的DynamoDBMarshaller类,该类用于编组任何枚举类。但是,这对枚举列表不起作用 我知道我可以编写一个处理枚举列表的封送拆收器,但我必须将其作为字符串写入dynamo(基本上是jsonify列表)。这并不理想。对于其他类类型,可以使用Java DynamoDBMarshaller到枚举列表的字符串列表,java,enums,amazon-dynamodb,Java,Enums,Amazon Dynamodb,我已经了解了如何创建一个通用的DynamoDBMarshaller类,该类用于编组任何枚举类。但是,这对枚举列表不起作用 我知道我可以编写一个处理枚举列表的封送拆收器,但我必须将其作为字符串写入dynamo(基本上是jsonify列表)。这并不理想。对于其他类类型,可以使用@DynamoDBDocument对它们进行注释,但这不适用于枚举类型 那么,有没有一种方法可以在dynamo中将我的枚举类作为字符串列表进行整理?我相信您需要指定要序列化的确切枚举类(并且不能做一般性的事情)。然后,您可以使
@DynamoDBDocument
对它们进行注释,但这不适用于枚举类型
那么,有没有一种方法可以在dynamo中将我的枚举类作为字符串列表进行整理?我相信您需要指定要序列化的确切枚举类(并且不能做一般性的事情)。然后,您可以使用库(如)为您执行序列化:
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");
}
}
}
其中“ENUM_NAME”是枚举类
@DynamoDBMarshalling(marshallerClass = EnumListMarshaller.class)