Я пытаюсь отобразить объект json из моей таблицы DynamodB, используя DynamoDbMapper и с последним aws android sdk: com.amazonaws: aws-android-sdk-ddb-mapper: 2.13.0, я вижу это исключение: "DynamoDBMappingException: ожидаемое S в значении ...
Объект json в моей таблице имеет 3 атрибута, 2 из которых являются строковыми, а третий - список сложных объектов. Я создал объект с использованием@DynamoDbDocument аннотация для сложного объекта и используется правильная аннотация маршалинга, но, похоже, она не демаршалирует объект json в объект java. Сложный объект - это объект json в этом формате:
{
"allCitiesList": [
{
"city": "Auckland, New Zealand",
"times": {
"recTimes": [
"Jan1",
"Jan2"
]
}
}
}
public class CitiesDO {
private String city;
private String country;
private List<AllCitiesObject> allCitiesList;
...get/setters for other fields...
@DynamoDBMarshalling(marshallerClass =
AllCitiesJSONMarshaller.class)
public List<AllCitiesObject> getAllCitiesList() {
return allCitiesList;
}
public void setAllCitiesList(List<AllCitiesObject> allCitiesList) {
this.allCitiesList = allCitiesList;
}
}
@DynamoDBDocument
public class AllCitiesObject {
@DynamoDBAttribute(attributeName = "allCitiesList")
private String data;
public AllCitiesObject(){}
public String getData() {
return data.toString();
}
public void setData(String data) {
this.data = data;
}
}
class AllCitiesJSONMarshaller extends JsonMarshaller<AllCitiesObject> {}
Также пробовал этот подход с пользовательским маршаллером, но безуспешно:
public class MyCustomMarshaller implements DynamoDBMarshaller<List<AllCitiesObject>> {
private static final ObjectMapper mapper = new ObjectMapper();
private static final ObjectWriter writer = mapper.writer();
@Override
public String marshall(List<AllCitiesObject> obj) {
try {
return writer.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException(
"Unable to marshall the instance of " + obj.getClass()
+ "into a string", e);
}
}
@Override
public List<AllCitiesObject> unmarshall(Class<List<AllCitiesObject>> clazz, String json) {
final CollectionType
type =
mapper.getTypeFactory().constructCollectionType(List.class, AllCitiesObject.class);
try {
return mapper.readValue(json, type);
} catch (Exception e) {
throw new RuntimeException("Unable to unmarshall the string " + json
+ "into " + clazz, e);
}
}
}
Исключение составляет: DynamoDBMappingException: ожидаемое S в значении {L: [{M: {times = {M: {recTimes = {L: [{S: Jan1,}, {S: Jan2,}
Мне трудно разобрать JSON в строку, хотя ядумаю, я настроил этоправильно.Может кто-нибудь помочь мне понять, что мне не хватает и как подойти к этому вопросу?Буду очень признателен за вашу помощь!