내가 디나모에 저장하고 싶은 사용자 정의 변환을 통해 DynamoDB의 사용자 정의 형식을 변환 할 때 중첩 된 ZonedDateTime 인스턴스를 매핑하는 데 실패잭슨 JSON ObjectMapper 내가 항목을
public class ZonedDateTimeConverter implements DynamoDBTypeConverter<String, ZonedDateTime> {
public ZonedDateTimeConverter(){}
@Override
public String convert(final ZonedDateTime time) {
return time.toString();
}
@Override
public ZonedDateTime unconvert(final String stringValue) {
return ZonedDateTime.parse(stringValue);
}
}
,369 :
public class LineItem {
private ZonedDateTime dateStart;
private ZonedDateTime dateEnd;
private long balance;
@DynamoDBTypeConverted(converter = ZonedDateTimeConverter.class)
public getDateStart() {...}
@DynamoDBTypeConverted(converter = ZonedDateTimeConverter.class)
public getDateEnd() {...}
}
는 I는 다음과 ZonedDateTime에 대한 알려진 작업 컨버터를 사용하고
그리고 변환기는 기본 클래스에 주석이 달렸을 때 완벽하게 작동합니다. 하지만 항목 목록에 중첩 된 사용자 정의 유형이 있고 DynamoDB가 올바르게 중첩 된 ZonedDateTime을 변환/변환하지 못하게하는 방법을 파악할 수 없습니다.
는 난 운이없이 LineItem을 목록에 대한 사용자 정의 변환을 썼다 :public class ListLineItemConverter implements DynamoDBTypeConverter<String, List<LineItem>> {
private ObjectMapper objectMapper;
public ListLineItemConverter() {
objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// THIS LINE OF CODE FIXED THE ISSUE FOR ME
objectMapper.findAndRegisterModules();
// THIS LINE OF CODE FIXED THE ISSUE FOR ME
}
@Override
public String convert(List<LineItem> object) {
try {
String result = objectMapper.writeValueAsString(object);
return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new RuntimeException("bad json marshalling");
}
}
@Override
public List<LineItem> unconvert(String object) {
try {
return objectMapper.readValue(object, new TypeReference<List<LineItem>>() {});
} catch (IOException e) {
throw new RuntimeException("bad json unmarshalling");
}
}
}
나는이 작동하도록하는 데 사용할 보일 수 주석의 어떤 조합이 없습니다. 난 항상 얻을 :
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.time.ZonedDateTime: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
편집 : 나는 LineItem
에서 ZonedDateTime
의 인스턴스를 주석 경우 코드가 완전히 잘 작동합니다. 이 깊은 3 단계 묻혀 그래서 DynamoDB의는 문제가 @DynamoDBTypeConverted
주석을 읽는 데 :
Statement.items.get[0].dateStart // annotations aren't working at this level
을
Statement.items.get[0].dateEnd // annotations aren't working at this level