我有一个Java类,它是DynamoDB中表的数据模型.我想使用Dynamo中的DynamoDBMapperto save和loaditems.该班的一名成员是List<MyObject>.所以我用它JsonMarshaller<List<MyObject>>来序列化和反序列化这个字段.
该列表可以通过成功序列化JsonMarshaller.但是,当我尝试检索条目并读取列表时,它会抛出异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MyObject.看起来JsonMarshaller将数据反序列化为LinkedHashMap而不是MyObject.我该怎样摆脱这个问题?
MCVE:
// 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; }
@DynamoDBMarshalling(marshallerClass = ObjectListMarshaller.class)
public …Run Code Online (Sandbox Code Playgroud) 我在 DynamoDB 中有一些条目,其中的字段如下,采用 DynamoDB 文档格式:
{ "foo" : { "N" : "45" }, "bar" : { "N" : "12" }}
我有一个代表文档类型的 Java 类:
public class FooBar {
private final int foo;
private final int bar;
public FooBar(
int foo,
int bar
) {
this.foo = foo;
this.bar = bar;
}
public int getFoo() {
return foo;
}
public int getBar() {
return bar;
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用DynamoDB 映射器来获取行并将其放入表中(为简洁起见,省略了表示整行的中间类)。我不想将 DynamoDB 注释(等)添加@DynamoDBDocument到@DynamoDBAttribute类中FooBar,因为它们需要零参数构造函数和 setter 方法,但这应该是不可变的数据对象。
因此,我想使用 …