Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android DynamoDBMappingException:值应为S_Java_Android_Amazon Web Services_Amazon Dynamodb_Aws Sdk - Fatal编程技术网

Java Android DynamoDBMappingException:值应为S

Java Android DynamoDBMappingException:值应为S,java,android,amazon-web-services,amazon-dynamodb,aws-sdk,Java,Android,Amazon Web Services,Amazon Dynamodb,Aws Sdk,我试图使用DynamoDbMapper和最新的aws android sdk:com.amazonaws:aws android sdk ddb mapper:2.13.0从我的dynamodb表映射json对象,我看到这个异常:“DynamoDBMappingException:Expected'S in value…” 我的表中的json对象有3个属性,其中2个是字符串,第三个是复杂对象的列表。我使用@DynamoDbDocument注释为复杂对象创建了一个对象,并使用了正确的封送注释,但它

我试图使用DynamoDbMapper和最新的aws android sdk:com.amazonaws:aws android sdk ddb mapper:2.13.0从我的dynamodb表映射json对象,我看到这个异常:“DynamoDBMappingException:Expected'S in value…”

我的表中的json对象有3个属性,其中2个是字符串,第三个是复杂对象的列表。我使用@DynamoDbDocument注释为复杂对象创建了一个对象,并使用了正确的封送注释,但它似乎没有将json对象正确解组为java对象。 复杂对象是以下格式的json对象:

{
  "allCitiesList": [
    {
      "city": "Auckland, New Zealand",
      "times": {
        "recTimes": [
          "Jan1",
          "Jan2"
        ]
      }
    }
}
class AllCitiesJSONMarshaller扩展了JsonMarshaller{}

也曾使用自定义封送拆收器尝试过此方法,但没有成功:

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);
        }
    }

}
公共类MyCustomMarshaller实现DynamoDBMarshaller{
私有静态最终ObjectMapper mapper=新ObjectMapper();
私有静态最终ObjectWriter writer=mapper.writer();
@凌驾
公共字符串(列表obj){
试一试{
返回writer.writeValueAsString(obj);
}捕获(JsonProcessingException e){
抛出新的运行时异常(
无法封送“+obj.getClass()的实例
+“成串”,e);
}
}
@凌驾
公共列表解组(类clazz,字符串json){
最终收集类型
类型=
mapper.getTypeFactory().ConstructionCollectionType(List.class,AllCitieObject.class);
试一试{
返回mapper.readValue(json,类型);
}捕获(例外e){
抛出新的RuntimeException(“无法解组字符串”+json
+“插入”+clazz,e);
}
}
}
例外情况是: DynamoDBMappingException:值{L:[{M:{times={M:{recTimes={L:[{S:Jan1,},{S:Jan2,}中应为S

我很难将json解组为字符串,尽管我认为我已经正确设置了它。请任何人帮助我了解我缺少的内容以及如何解决此问题?我非常感谢您的帮助!

不推荐使用,因此我建议使用较新的注释

这本书有一些有用的注释

你也可以看到我的一个例子


总之,您创建一个
AllCities
普通java对象。然后编写一个简单的转换器类,告诉DynamoDB如何将
AllCities
对象转换为字符串以进入DynamoDB。类似地,转换器类告诉您的应用程序如何将字符串转换回java对象。

如果其他对象是绝对值用DDBMAP来解决这个问题,考虑使用DDBclipse来显式地转换和映射DO对象和DDB表数据。由于时间的限制,我将回到这里,在稍后的时间里找出映射问题,并在这里给出答案,以帮助其他人。Stu:我非常感谢您的帮助和快速响应。ponse.我使用的是最新的aws android sdk:com.amazonaws:aws android sdk ddb mapper:2.13.0,它没有更新的DynamoDBTypeConverted注释,所以我相信我一直在使用编组注释,除非我遗漏了什么或者有任何其他解决方法。再次感谢您的时间和帮助!您找到答案了吗?
@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;
    }
}
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);
        }
    }

}