DynamoDB конвертирует ZonedDateTime во вложенный объект - PullRequest
0 голосов
/ 26 ноября 2018

Я переключаюсь с MongoDB на DynamoDB в проекте.Сейчас я пытаюсь сохранить этот объект Post в БД.Я использую DynamoDBTypeConverter для преобразования ZonedDateTime в строку, так как DynamoDB не поддерживает ZonedDateTime.

Это прекрасно работает, но когда я добавляю поле ZonedDateTime в объект Comment и пытаюсь преобразовать его, оно не работает.Я попытался добавить конвертер в класс Comment и попытался использовать конвертер в классе Post для Comment, но, похоже, ничего не работает.Есть ли способ преобразовать поле во вложенном объекте для DynamoDB?

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Cannot marshall type class java.time.ZonedDateTime without a custom marshaler or @DynamoDBDocument annotation.

@DynamoDBTable(tableName = "Post")
public class Post {

    @DynamoDBHashKey
    private String postNumber;
    private ZonedDateTime date;
    private List<Comment> comments;

    @DynamoDBTypeConverted(converter = ZonedDateTimeConverter.class)
    @DynamoDBAttribute
    public ZonedDateTime getDate() {
        return date;
    }

    @DynamoDBAttribute(attributeName = "comments")
    public List<Comment> getComments() {
        return comments;
    }


static public class ZonedDateTimeConverter implements DynamoDBTypeConverter<String, ZonedDateTime> {

    @Override
    public String convert(final ZonedDateTime time) {
        return time.toString();
    }

    @Override
    public ZonedDateTime unconvert(final String stringValue) {
        return ZonedDateTime.parse(stringValue);
    }
}



@DynamoDBDocument
public class Comment {

private String commentNumber;
@NotNull
private User user;
private ZonedDateTime date;

@DynamoDBTypeConverted(converter = ZonedDateTimeConverter.class)
@DynamoDBAttribute
public ZonedDateTime getDate(){
    return this.date;
}

static public class ZonedDateTimeConverter implements DynamoDBTypeConverter<String, ZonedDateTime> {

    @Override
    public String convert(final ZonedDateTime time) {
        return time.toString();
    }

    @Override
    public ZonedDateTime unconvert(final String stringValue) {
        return ZonedDateTime.parse(stringValue);
    }
}
...