Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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/2/spring/12.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 创建列表的替代方法<;MyObject>;在@DynamoDBTable中不使用dynamodbmarshalling(已弃用)_Java_Spring_Jackson_Amazon Dynamodb - Fatal编程技术网

Java 创建列表的替代方法<;MyObject>;在@DynamoDBTable中不使用dynamodbmarshalling(已弃用)

Java 创建列表的替代方法<;MyObject>;在@DynamoDBTable中不使用dynamodbmarshalling(已弃用),java,spring,jackson,amazon-dynamodb,Java,Spring,Jackson,Amazon Dynamodb,我随后创建了MyCustomMarshaller MyCustomMarshaller public class MyCustomMarshaller implements DynamoDBMarshaller<List<DemoClass>> { private static final ObjectMapper mapper = new ObjectMapper(); private static final ObjectWriter writer

我随后创建了MyCustomMarshaller

MyCustomMarshaller

public class MyCustomMarshaller implements DynamoDBMarshaller<List<DemoClass>> {

    private static final ObjectMapper mapper = new ObjectMapper();
    private static final ObjectWriter writer = mapper.writer();

    @Override
    public String marshall(List<DemoClass> obj) {

        try {
            return writer.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw failure(e,
                    "Unable to marshall the instance of " + obj.getClass()
                            + "into a string");
        }
    }

    @Override
    public List<DemoClass> unmarshall(Class<List<DemoClass>> clazz, String json) {
        final CollectionType
                type =
                mapper.getTypeFactory().constructCollectionType(List.class, DemoClass.class);
        try {
            return mapper.readValue(json, type);
        } catch (Exception e) {
            throw failure(e, "Unable to unmarshall the string " + json
                    + "into " + clazz);
        }
    }
}
所有的密码都很好用,事实上

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMarshalling是 已弃用

那么,我如何在不使用dynamoDBmarshalling的情况下更改代码呢

提前感谢,
Jay是的,你应该使用

你可以从中复制我的代码

为了完整起见,这里是我在链接答案中使用的示例

// Model.java
@DynamoDBTable(tableName = "...")
public class Model {
  private String id;
  private List<MyObject> objects;

  public Model(String id, List<MyObject> objects) {
    this.id = id;
    this.objects = objects;
  }

  @DynamoDBHashKey(attributeName = "id")
  public String getId() { return this.id; }
  public void setId(String id) { this.id = id; }

  @DynamoDBTypeConverted(converter = MyObjectConverter.class)
  public List<MyObject> getObjects() { return this.objects; }
  public void setObjects(List<MyObject> objects) { this.objects = objects; }
}
//Model.java
@DynamoDBTable(tableName=“…”)
公共类模型{
私有字符串id;
私有列表对象;
公共模型(字符串id、列表对象){
this.id=id;
this.objects=对象;
}
@DynamoDBHashKey(attributeName=“id”)
公共字符串getId(){返回this.id;}
public void setId(字符串id){this.id=id;}
@DynamoDBTypeConverted(converter=MyObjectConverter.class)
public List getObjects(){返回this.objects;}
public void setObjects(列出对象){this.objects=objects;}
}
-

公共类MyObjectConverter实现DynamoDBTypeConverter{
@凌驾
公共字符串转换(列表对象){
//杰克逊对象映射器
ObjectMapper ObjectMapper=新的ObjectMapper();
试一试{
字符串objectsString=objectMapper.writeValueAsString(对象);
返回对象字符串;
}捕获(JsonProcessingException e){
//做点什么
}
返回null;
}
@凌驾
公共列表取消插入(字符串对象字符串){
ObjectMapper ObjectMapper=新的ObjectMapper();
试一试{
List objects=objectMapper.readValue(objectsString,新类型引用(){});
归还物品;
}捕获(JSONParsee异常){
//做点什么
}捕获(JsonMappingException e){
//做点什么
}捕获(IOE异常){
//做点什么
}
返回null;
}
}

另一种更容易实现的方法,让DynamoDB在幕后处理转换

将字段注释为@DynamoAttribute

@DynamoDBAttribute
private MyObjectClass myObject;
然后,您用@DynamoDBDocument注释“MyObjectClass”

@DynamoDBDocument
public class MyObjectClass {
....
}
DynamoDB将“MyObjectClass myObject”转换和取消转换为JSON形状,即使它是一个对象列表/数组

public class MyObjectConverter implements DynamoDBTypeConverter<String, List<MyObject>> {

    @Override
    public String convert(List<Object> objects) {
        //Jackson object mapper
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            String objectsString = objectMapper.writeValueAsString(objects);
            return objectsString;
        } catch (JsonProcessingException e) {
            //do something
        }
        return null;
    }

    @Override
    public List<Object> unconvert(String objectssString) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            List<Object> objects = objectMapper.readValue(objectsString, new TypeReference<List<Object>>(){});
            return objects;
        } catch (JsonParseException e) {
            //do something
        } catch (JsonMappingException e) {
            //do something
        } catch (IOException e) {
            //do something
        }
        return null;
    }
}
@DynamoDBAttribute
private MyObjectClass myObject;
@DynamoDBDocument
public class MyObjectClass {
....
}