2015-01-21 17 views
4

Я использую java.time.LocalDateTime в своем приложении java. Я также пытаюсь использовать DynamoDBMapper, а через аннотацию сохраните переменную LocalDateTime. К сожалению, я получаю следующее сообщение об ошибке:DynamoDBMapper для java.time.LocalDateTime

DynamoDBMappingException: Unsupported type: class java.time.LocalDateTime 

Есть ли способ, чтобы это отображение без использования DynamoDBMarshalling?

ответ

2

Несмотря на то, что я сказал, я нашел достаточно простым, чтобы использовать 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); 
     } 
    } 
} 
+0

Теперь аннотацию [DynamoDBMarshalling] (http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMarshalling.html) является устаревшим, вы можете использовать аннотацию [DynamoDBTypeConverted] (http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBTypeConverted.html). См. Мой ответ для получения дополнительной информации. –

5

Нет AWS DynamoDB Java SDK не может отображать java.time.LocalDateTime изначально без использования какой-либо аннотации.

Чтобы сделать это сопоставление, вы должны использовать аннотацию DynamoDBTypeConverted, представленную в версии 1.11.20 AWS Java SDK. Начиная с этой версии аннотация 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.

Смежные вопросы