我有一個名爲'inbox'的DynamoDB表。它將存儲發送給用戶和從用戶發送的消息。將有不止一種類型的消息,並且基於類型,數據可能與消息一起出現。我有一個映射到收件箱表的對象UserMessage。雖然所有消息都會有公用字段(例如sendTo,sentFrom),但數據結構會有所不同。使用Java泛型時出現DynamoDBMappingException
與使用Map來處理這些數據相比,使用Java泛型可能是一種更好的方法。我有一個用@DynamoDBDocument註釋的對象,DynamoDBMapper會將它序列化爲JSON。當成員變量聲明爲:
private ContactData data;
確實,結果是預期的。數據被序列化爲JSON並以ContactData的註釋格式存儲在收件箱中的數據屬性中。但是,爲了獲得使用泛型所需的靈活性,對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;
}
}
併爲聯絡人資料代碼:
@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;
}
}
控制器代碼來設置這就是:
UserMessage<ContactData> message = new UserMessage<ContactData>();
ContactData cd = new ContactData();
cd.setEmail("[email protected]");
cd.setFirstname("Jane");
cd.setLastname("Smith");
message.setToId("[email protected]");
message.setData(cd)
DynamoDB.getMapper().save(message);
我相當沒有經驗和普通的類型對我來說都是全新的,所以我希望我能夠正確地使用它們。我覺得我是。我只是認爲在這種情況下DynamoDBMapper無法映射到正確的類。 謝謝 傑夫