- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个名为“inbox”的 DynamoDB 表。其中将存储发送给用户和从用户发送的消息。将有不止一种类型的消息,并且根据类型,数据可能与消息一起出现。我有一个对象 UserMessage 映射到收件箱表。虽然所有消息都有公共(public)字段(例如 sendTo、sentFrom),但数据的结构会有所不同。
与使用 Map 来存储这些数据相比,使用 Java 泛型可能是更好的方法。我有一个用 @DynamoDBDocument 注释的对象,DynamoDBMapper 会将其序列化为 JSON。当成员变量声明为:
private ContactData data;
确实,这个结果是预料之中的。数据被序列化为JSON并以ContactData的注释格式存储在inbox的data属性中。但是,为了通过使用泛型类型获得所需的灵 active ,对 DynamoDBMapper.save() 的调用会抛出 DynamoDBMappingException:无法将 T 转换为类。
这是 UserMessage 类:
@DynamoDBTable(tableName="inbox")
public class UserMessage<T> {
private String toId;
private T data;
@DynamoDBAttribute(attributeName="data")
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@DynamoDBHashKey(attributeName="toId")
public String getToId() {
return toId;
}
public void setToId(String to) {
this.toId = to;
}
}
ContactData 的代码:
@DynamoDBDocument
public class ContactData {
private String firstname;
private String lastname;
private String email;
@DynamoDBAttribute(attributeName = "firstname")
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@DynamoDBAttribute(attributeName = "lastname")
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
@DynamoDBAttribute(attributeName = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
进行此设置的 Controller 代码是:
UserMessage<ContactData> message = new UserMessage<ContactData>();
ContactData cd = new ContactData();
cd.setEmail("jane@test.com");
cd.setFirstname("Jane");
cd.setLastname("Smith");
message.setToId("test@email.com");
message.setData(cd)
DynamoDB.getMapper().save(message);
我相当缺乏经验,泛型类型对我来说是全新的,所以我希望我正确使用它们。我觉得我是。我只是认为 DynamoDBMapper 在这种情况下无法映射到正确的类。谢谢杰夫
最佳答案
每次使用非标准属性类时,您都需要提供一个编码器。在这里,我使用了一个全局对象编码器,您可以使用它来JSON-ify任何您想要的东西。
我个人更喜欢使用静态类型,每个类型都有一个我可以推理的定义的编码器,但是 ymmv。
public class GenericDBEntity<T>
{
..
private T extra;
@DynamoDBAttribute
@DynamoDBMarshalling(marshallerClass=ObjectMarshaller.class)
public T getExtra()
{
return extra;
}
public void setExtra(T extra)
{
this.extra = extra;
}
public static class ObjectMarshaller implements DynamoDBMarshaller<Object>
{
@Override
public String marshall(Object getterReturnResult)
{
return getterReturnResult.toString();
}
@Override
public Object unmarshall(Class<Object> clazz, String obj)
{
return obj;
}
}
}
关于java - 使用 Java 泛型时出现 DynamoDBMappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36294828/
我有一个名为“inbox”的 DynamoDB 表。其中将存储发送给用户和从用户发送的消息。将有不止一种类型的消息,并且根据类型,数据可能与消息一起出现。我有一个对象 UserMessage 映射到收
在编写 DynamoDB Java 应用程序时,如果表及其数据模型配置不正确,您可能会在写入表或从表中检索时收到“哈希键无映射”错误。完整的异常类似于: com.amazonaws.services.
我是 NoSQL 和 Amazon Dynamo DB 的新手。我试图通过 username 首先从 DynamoDB UserMaster 表中检索用户。 我有一个表 UserMaster 有 5
正在执行 orderRequestDao.save(new OrderRequest("5000", "body"));成功地在 Dynamo 中放置了一个记录。任何读取返回的尝试: [Request
我正在尝试使用 DynamoDbMapper 和最新的 aws android sdk: com.amazonaws:aws-android-sdk-ddb-mapper:2.13.0 从我的 dyn
Dynamo 抛出的这个错误非常模糊,但有一种方法可以快速缩小问题范围。引发此错误的代码可以在 https://github.com/aws/aws-sdk-java/blob/master/aws-
我正在尝试将下面类的实例保存到 dynamdb 但得到DynamoDBMappingException:不支持;需要@DynamoDBTyped 或@DynamoDBTypeConverted 异常。
我遵循了此处概述的所有内容 - https://github.com/derjust/spring-data-dynamodb/wiki/Use-Hash-Range-keys 。但还是没有运气。 我
好的,我已经查看了 this post我看过 this other post 。这是我的具体问题: 我有一个名为“server”的简单 DynamoDB 表,其中包含一个分区键“serverName”
我是一名优秀的程序员,十分优秀!