在后端处理 PUT http 请求中的可选字段的最佳方法是什么

Arn*_*rma 1 java rest spring http

我找不到 PUT 调用的开发人员指南。如果在 PUT 请求中将可选值作为 null 传递,我们应该怎么做。我们是在 db 中将其设置为 null 还是保留 db 中的先前值(如果有)?这种方法的问题在于,一旦使用值创建,我们将无法更新值以取消可选字段。

例如。对于同一个实体假设Student表,我有一个名称为student_optional_subject的可为空列。现在在 POST student_optional_subject 中设置为值“微积分”。再次发出 PUT 请求,请求正文中的 student_optional_subject 为空(即请求中缺少该字段,因为它是可选字段)..我应该在 student_optional_subject 中保留“微积分”还是将其设置为空..

Jas*_*ers 6

如果 PUT 请求中的值为 null,则应将其保存为 null。它不应该被忽略,因为它是可选的。

PUT方法的定义方式应该始终是资源的完整更新。如果我执行 PUT 然后执行相同资源的 GET,我从 GET 收到的表示应该等同于在 PUT 中发送的表示。

如果忽略空字段,则称为部分更新。PUT 不支持部分更新。这是人们在构建 REST API 时最常犯的错误之一。

如果要进行部分更新,可以使用PATCH方法。但是,要小心,因为 PATCH 比 PUT 更常被错误地使用。如果您使用 PATCH,您应该使用差异媒体类型,例如application/patch+jsonapplication/merge-patch+json