[英]Patch REST API to Partial Update MongoDB in spring boot
[英]Partial fields update REST API
有这个MongoBean:SuperBean
class SuperBean extends MongoBaseBean{
private String id;
private String title;
private String parent;
//And getters, setters
}
需要编写一个更新API,该API能够执行部分属性更新。 在网络上以及从我的同龄人那里听到的常见方法是检查Null请求中的字段,如果不为null,则进行更新。 但是,如果更新请求将值更新为Null,该怎么办?
经过少量讨论,我们提出了三种方法:
为Bean中的字段设置默认值。 因此,如果它在请求中没有$而不是非null父字段,则将考虑对其进行更新。
class SuperBean extends MongoBaseBean{ private String id; private String title; private String parent = "$"; //And getters, setters }
让更新API实施接受地图。 将提取实际的bean,并且将更新请求映射中存在的所有字段。
@Post public SuperBean updatePartial(Map<String,Object> dataObject) {}
让更新API接受包含2个映射的DTO。 一个包含旧值,另一个包含新值。 在仅当数据库包含在oldDataObj中发送的值的情况下才必须进行更新的情况下,这可能是有利的。 但这增加了有效载荷的大小。
class SuperBeanUpdateDTO { private Map<String, Object> oldDataObj; private Map<String, Object> newDataObject; //getters, setters } @Post public SuperBean updatePartial(SuperBeanUpdateDTO updateDTO) {}
选择这些方法之一应考虑哪些因素? 有没有更好的方法来解决此问题?
在我的项目中,我们通常选择与第二种方式相似的方式。 但不完全相同。
例如,在客户端,您有一个页面或一个视图来修改您的个人资料信息,包括name
, birthday
, gender
,尽管您只是修改了name
值,但是当您单击save
按钮时,它仍然会将数据发送到服务器包括“ birthday
和“带有name
gender
字段,但只需保持其旧值即可。 服务器API将直接更新数据库中的这三个值,而不检查其值是否更改。
如果您有另一个页面或视图来修改配置文件的其他部分(例如密码),则需要在客户端中添加新方法,在服务器中添加新API。 API URL PATCH /reset_password
,并且发送的数据应包含old_password
和new_password
字段。
PS:
1.我们使用PUT
或PATCH
更新资源,而不是POST
, POST
用于创建新资源。 2.当您更新资源时,在上面的示例中,API喜欢PATCH /profiles/:id
(其他人的个人资料)或PATCH /profile
(您自己的个人资料),因此发送的数据不再需要id
字段,它包含在您的API URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.