Я пытаюсь добавить атрибут Map<String, LocalDateTime>
в уже существующий DAO.Кажется, что AWS SDK не знает, как преобразовать это, так как я получаю эту ошибку:
.DynamoDBMappingException: not supported; requires @DynamoDBTyped or @DynamoDBTypeConverted
Я написал DynamoDBTypeConverter
, чтобы попытаться решить эту проблему, но он не отображаетсяданные в правильном формате:
public static class StringLocalDateTimeMapConverter
implements DynamoDBTypeConverter<String, Map<String, LocalDateTime>> {
@Override
public String convert(Map<String, LocalDateTime> map) {
try {
if (map != null) {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(map);
} else {
throw new Exception("map is empty");
}
} catch (Exception e) {
LOGGER.error(String.format("Error converting map to Dynamo String. Reason - {%s}",
e.getMessage()));
return "";
}
}
@Override
public Map<String, LocalDateTime> unconvert(String string) {
try {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(string, Map.class);
} catch (Exception e) {
LOGGER.error(String.format("Error unconverting Dynamo String to map. Reason - {%s}",
e.getMessage()));
return new HashMap<>();
}
}
}
Однако это выглядит не так, как хотелось бы - в DDB карта в итоге выглядела так:
{\"1234567890\":{\"year\":2019,\"month\":\"SEPTEMBER\",\"monthValue\":9,\"dayOfMonth\":20,\"hour\":15,\"minute\":13,\"second\":26,\"nano\":98000000,\"dayOfWeek\":\"FRIDAY\",\"dayOfYear\":263,\"chronology\":{\"calendarType\":\"iso8601\",\"id\":\"ISO\"}}}
Я не уверен, чтолучший способ смоделировать эти данные, чтобы DDB был доволен этим.Какие-либо предложения?