Чтобы пометить другой класс как часть модели данных для DynamoDBMapper, вы можете аннотировать его с помощью @DynamoDBDocument
, что говорит DynamoDBMapper, что класс может быть сериализован как документ DynamoDB.
Для классов, которые вы не пишете (например, из библиотеки Java или внешней библиотеки) или если вам нужен больший контроль над сериализацией одного из ваших собственных классов, вы можете использовать @DynamoDBTypeConverted
, что позволяет вам сопоставить произвольные данные , предоставив собственную реализацию DynamoDBTypeConverter
для преобразования из любого объекта Java в любой поддерживаемый тип DynamoDB.
Используя ваш пример кода, я добавил всоответствующие @DynamoDBDocument
и @DynamoDBTypeConverted
аннотации, а также пример реализации DynamoDBTypeConverter
, который преобразует Instant
в ISO-8601 String
.Если employeeId
является хеш-ключом вашей таблицы, обязательно добавьте аннотацию @DynamoDBHashKey
к employeeId
.
@DynamoDBTable(tableName = TABLE_NAME)
public class EmployeeData {
public final static String TABLE_NAME = “EmployeeDataRecord”;
@DynamoDBAttribute(attributeName = “employeeID”)
public String EmployeeID;
@DynamoDBAttribute(attributeName = “EmployeeLevelDataRecords”)
public EmployeeLevelTrail employeeLevelTrail
}
@DynamoDBDocument
public class EmployeeLevelTrail {
public final static String DDB_ATTR_EMPLOYEE_LEVEL_TRAIL = “employeeLevelTrail”;
@DynamoDBAttribute(attributeName = DDB_ATTR_EMPLOYEE_LEVEL_TRAIL)
private List<EmployeeLevelRecord> thisEmployeeLevelRecords;
public void appendEmployeeLevelRecord(@NonNull EmployeeLevelRecord employeeLevelRecord) {
thisEmployeeLevelRecords.add(employeeLevelRecord);
}
}
@DynamoDBDocument
public class EmployeeLevelRecord {
private String Level;
private String Manager;
@DynamoDBTypeConverted(converter = InstantToStringTypeConverter.class)
private Instant timeOfEvent;
}
public class InstantToStringTypeConverter implements DynamoDBTypeConverter<String, Instant> {
@Override
public String convert(final Instant instant) {
return instant.toString();
}
@Override
public Instant unconvert(final String string) {
return Instant.parse(string);
}
}