@DynamoDBTypeConverted аннотация во внешнем выпуске 1.10 против 1.11.x - PullRequest
0 голосов
/ 26 февраля 2019

Я обновил AWS java SDK своего сервиса с внешнего выпуска 1.10 до 1.11.x и обнаружил, что поведение аннотации @DynamoDBTypeConverted, похоже, изменилось.

Этот код, используемый для компиляции:

@DynamoDBTypeConverted(converter = CustomObjectConverter.class)
public class Job {
  private List<CustomObject> objects;
}
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter;

public class CustomObjectConverter implements DynamoDBTypeConverter<String, CustomObject> {
  private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
  private static final TypeReference reference = new TypeReference<CustomObject>() {};

  @Override
  public String convert(CustomObject customObject) {
    try {
        return OBJECT_MAPPER.writerWithType(reference).writeValueAsString(customObject)
    } catch (Exception e) {
        throw new RuntimeException(e)
    }

    @Override
    public CustomObject unconvert(String object) {
      try {
          return OBJECT_MAPPER.readValue(object, reference);
      } catch (IOException e) {
          throw new RuntimeException(e);
      }
    }
}

Внешний выпуск 1.10 не имел проблем с использованием аннотации на List<CustomObject>, как если бы он знал, что должен применять конвертер к ОБЪЕКТАМ в списке, а не к самому списку.После обновления SDK до 1.11.x я попытался запустить код, похожий на этот псевдокод:

fakeDb = DynamoDBEmbedded.create().amazonDynamoDB();
        mapper = new DynamoDBMapper(fakeDb, new DynamoDBMapperConfig(withTableNameReplacement("testTable")));
// create table and stuff
mapper.save(new Job(ImmutableList.of(new CustomObject(""))) 

, и запустил это исключение

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Job[objects]; could not convert attribute
...
Caused by: java.lang.ClassCastException: com.google.common.collect.SingletonImmutableList cannot be cast to ....CustomObject

Похоже, что после обновления он пытаетсяприменить конвертер к самому List, а не к CustomObjects внутри него.Мне все еще нужно сериализовать объекты внутри, а не List, поэтому мне интересно, какой подход я должен использовать.

...