java.time.LocalDateTime 的 DynamoDBMapper

DynamoDBMapper for java.time.LocalDateTime

我在 java 应用程序中使用 java.time.LocalDateTime。我也在尝试使用 DynamoDBMapper 并通过注释保存 LocalDateTime 变量。不幸的是我收到以下错误:

DynamoDBMappingException: Unsupported type: class java.time.LocalDateTime

有没有办法不用 DynamoDBMarshalling 就可以得到这个映射?

不管我怎么说,我发现使用 DynamoDBMarshalling 来编组一个字符串是很简单的。这是我的代码片段和一个 AWS reference:

class MyClass {

    ...

    @DynamoDBMarshalling(marshallerClass = LocalDateTimeConverter.class)
    public LocalDateTime getStartTime() {
        return startTime;
    }

    ...
    static public class LocalDateTimeConverter implements DynamoDBMarshaller<LocalDateTime> {

        @Override
        public String marshall(LocalDateTime time) {
            return time.toString();
        }

        @Override
        public LocalDateTime unmarshall(Class<LocalDateTime> dimensionType, String stringValue) {
            return LocalDateTime.parse(stringValue);
        }
    }
}

没有 AWS DynamoDB Java SDK 无法在不使用任何注释的情况下本地映射 java.time.LocalDateTime。

要进行此映射,您必须使用 DynamoDBTypeConverted annotation introduced in the version 1.11.20 of the AWS Java SDK. Since this version, the annotation DynamoDBMarshalling 已弃用。

你可以这样做:

class MyClass {

    ...

    @DynamoDBTypeConverted( converter = LocalDateTimeConverter.class )
    public LocalDateTime getStartTime() {

        return startTime;
    }

    ...

    static public class LocalDateTimeConverter implements DynamoDBTypeConverter<String, LocalDateTime> {

        @Override
        public String convert( final LocalDateTime time ) {

            return time.toString();
        }

        @Override
        public LocalDateTime unconvert( final String stringValue ) {

            return LocalDateTime.parse(stringValue);
        }
    }
}

使用此代码,存储的日期以 ISO-8601 格式保存为字符串,如下所示:2016-10-20T16:26:47.299.