有鑑於儲存更新項目的方式要求有所不同,對於原本的save method進像相應的調整,當然以下會隨著實作案例需要或喜好,沒有一定的方法。
為了因應PATCH method,Dao新增一個update method對應,實作時則依照前篇介紹的DynamoDBSaveExpression進行項目id存在才進行儲存,且使用忽略bean當中的null值更新。
public void update(Person peron) {
DynamoDBSaveExpression expr = new DynamoDBSaveExpression()
.withExpectedEntry("pk_id", new ExpectedAttributeValue(new AttributeValue(person.getId())));
mapper.save(person, expr, DynamoDBMapperConfig.builder()
.withSaveBehavior(SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES).build());
}
相對的,原本POST或PUT的儲存也應該增加條件,避免request任意提供id也能新增項目,因為id應該是server端才能產生的。
public void save(Person person) {
if (StringUtils.isNullOrEmpty(person.getId())) {
person.setId(UUID.randomUUID().toString());
person.setCreate_date(new Date());
person.setUpdate_date(new Date());
mapper.save(person);
}
else {
person.setUpdate_date(new Date());
DynamoDBSaveExpression expr = new DynamoDBSaveExpression()
.withExpectedEntry("pk_id", new ExpectedAttributeValue(new AttributeValue(person.getId())));
mapper.save(person, expr);
}
}
而之前我們未完成PATCH的部分(因為之前儲存邏輯與要求不符合),只要改成呼叫update method即可
PersonDaoImp.getInstance().update(person);