Amazon dynamodb 映射映射上的DynamoDBMappingException<;字符串,对象>;属性

Amazon dynamodb 映射映射上的DynamoDBMappingException<;字符串,对象>;属性,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我试图将下面的类实例保存到dynamdb中,但是 DynamoDBMappingException:不支持;需要@DynamoDBTyped或@DynamoDBTypeConverted异常 @DynamoDBTable(tableName = "FulfillmentOrders") public class FulfillmentOrder { @DynamoDBHashKey private String orderId; @DynamoDBAttribute

我试图将下面的类实例保存到dynamdb中,但是
DynamoDBMappingException:不支持;需要@DynamoDBTyped或@DynamoDBTypeConverted
异常

@DynamoDBTable(tableName = "FulfillmentOrders")
public class FulfillmentOrder {

    @DynamoDBHashKey
    private String orderId;

    @DynamoDBAttribute
    @DynamoDBTyped(value = DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
    private Map<String, Object> body;

    ....... 
}
@DynamoDBTable(tableName=“FulfillmentOrders”)
公共类完成命令{
@发电机钥匙
私有字符串orderId;
@发电机属性
@DynamoDBTyped(值=DynamoDBMapperFieldModel.DynamoDBAttributeType.M)
私有地图主体;
....... 
}
它在映射转换期间失败,似乎问题出在对象泛型类型中

有人能帮忙吗,这里的问题在哪里?或者SDK不支持这种转换


谢谢

DynamoDB不知道如何转换
映射中的
对象
,您必须创建一个自定义类型转换器。完成此操作后,您可以使用
@DynamoDBTypeConverted(converter=xxx)
注释属性:

在您的示例中:

@DynamoDBTable(tableName = "FulfillmentOrders")
public class FulfillmentOrder {

    @DynamoDBHashKey
    private String orderId;

    @DynamoDBAttribute
    @DynamoDBTypeConverted(converter = BodyTypeConverter.class)
    private Map<String, Object> body;
}


static public class BodyTypeConverter implements DynamoDBTypeConverter<String, Map<String, Object>> {

    @Override
    public String convert(Map<String, Object> object) {
        DimensionType itemDimensions = (Map<String, Object>) object;

        // Convert the object to a DynamoDB json string
        String json = "wibble";

        return json;
    }

    @Override
    public DimensionType unconvert(String s) {
        Map<String, Object> item = new Map<String, Object>();

        // Convert s to a Map<String, Object> here.

        return item;
    }
}
@DynamoDBTable(tableName=“FulfillmentOrders”)
公共类完成命令{
@发电机钥匙
私有字符串orderId;
@发电机属性
@DynamoDBTypeConverted(转换器=BodyTypeConverter.class)
私有地图主体;
}
静态公共类BodyTypeConverter实现DynamoDBTypeConverter{
@凌驾
公共字符串转换(映射对象){
DimensionType itemDimensions=(映射)对象;
//将对象转换为dynamodbjson字符串
字符串json=“wibble”;
返回json;
}
@凌驾
公共维度类型取消插入(字符串s){
映射项=新映射();
//在这里将s转换为地图。
退货项目;
}
}

更多信息请访问

谢谢您的回复!所以从你的答案来看,这意味着DynamoDb中的body属性应该是字符串类型,而不是Map,对吗?在我的例子中,它是映射类型。String只是DynamoDB支持的许多类型中的一种,只要您映射到一个受支持的类型,您就可以了(这里是一个受支持类型的列表)。在body属性将具有String类型的情况下,这个解决方案工作得很好。但是,如果类型是Map(document),转换将失败。似乎如果我想要一个文档类型,我应该使用镜像POJO,在这种情况下Map将不起作用。这是因为它不知道如何将
对象
映射到DynamoDB类型。因此,您必须告诉它如何映射您的
对象
是的,这就是重点。映射的值可以是任何DynamoDB支持的类型。你有这个例子吗?谢谢你,凯文!