【发布时间】:2019-07-13 16:50:19
【问题描述】:
我们正在使用 Golang 实现一个包含 CRUD 的 REST API,在更新服务中,客户端可以发送包含更改字段的部分 JSON,我们需要处理这些更改来更新实体。
从逻辑上讲,我们需要通过 Id 从 DB 获取实体到 struct,然后将 payload json 解组到另一个 struct 并更新实体。
但是,如果有效载荷 json 不完整,例如我有 struct
type Customer struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
JSON 请求看起来像
{
"Name": "Updated name"
}
然后应该用新名称更新客户。
这是个简单的例子,实际上它可以是一个嵌套的struct和嵌套的json,我们如何用golang,或者Java,.NET等其他语言来处理这种情况
【问题讨论】:
-
您目前如何将 json 解组为 Go 结构?
-
你可以使用 json.RawMessage 参考这个答案:stackoverflow.com/questions/11066946/…
-
如果您在已经填充的结构之上解组 JSON,则只有 JSON 中的字段会在结构中被修改,这非常容易 - 从数据库加载记录,在其上解组 JSON ,然后将其写回数据库。您能否展示您尝试过的方法以及遇到的问题?
-
请注意,通过RFC 7231,您要么需要使用
PATCH执行部分更新,要么通过PUT更新与实际资源部分重叠的资源。对于实际资源,这具有部分更新的效果,尽管PUT的语义仍然存在:用请求中提供的有效负载替换目标资源的当前有效负载。其他任何内容都违反了 HTTP 协议。此外,修补程序应向服务器发送有关如何修改资源以最终处于所需状态的说明。