Java中如何将List<LocalDateTime>映射到DynamoDB?
解决DynamoDB中List的映射问题
你当前的LocalDateTimeConverter仅支持单个LocalDateTime与String的转换,DynamoDB无法自动将其适配到集合类型(如List<LocalDateTime>),因此需要针对集合类型单独处理。下面提供两种可行方案:
方案一:编写List专属转换器
需要创建一个专门处理集合类型的转换器,实现DynamoDBTypeConverter<List<String>, List<LocalDateTime>>接口,完成列表与字符串列表的互相转换:
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.stream.Collectors; public class LocalDateTimeListConverter implements DynamoDBTypeConverter<List<String>, List<LocalDateTime>> { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME; @Override public List<String> convert(List<LocalDateTime> dateTimeList) { if (dateTimeList == null) return null; return dateTimeList.stream() .map(dt -> dt.format(FORMATTER)) .collect(Collectors.toList()); } @Override public List<LocalDateTime> unconvert(List<String> dateTimeStrList) { if (dateTimeStrList == null) return null; return dateTimeStrList.stream() .map(str -> LocalDateTime.parse(str, FORMATTER)) .collect(Collectors.toList()); } }
然后在实体类字段上指定该转换器:
@DynamoDBTypeConverted(converter = LocalDateTimeListConverter.class) private List<LocalDateTime> acquisitionsDates;
方案二:使用@DynamoDBTypeConvertedJson(推荐)
如果不想手动编写集合转换器,可直接使用@DynamoDBTypeConvertedJson注解,它会自动将集合序列化为JSON字符串存储,读取时反序列化为List<LocalDateTime>,无需额外转换逻辑:
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConvertedJson; @DynamoDBTypeConvertedJson private List<LocalDateTime> acquisitionsDates;
这种方式更简洁,适合大多数场景,DynamoDB SDK会自动处理JSON的序列化与反序列化。
内容的提问来源于stack exchange,提问作者piechos
相关产品推荐
相关产品推荐

