如何检测请求正文中的 json 是否为键或未给出键的空值

问题描述

我正在使用 Go gin 框架创建 API 服务器。现在我尝试为 PATCH 端点添加 /users 操作。 PATCH 操作接收 json 请求正文中的部分属性并更新 User 模型的属性在这种情况下,未出现在 json body 中的属性将保持原样。

我使用 ShouldBindJSON 方法解析 json 主体,它作为 PatchUserRequest 结构的实例给出。由于 PatchUserRequest属性是指针类型,如果键不在正文中,则属性设置为 nil。在其他情况下,该属性可以在键中具有 null 值。 问题是未给出如何检测请求正文中的 json 是否为键或键的空值。

email key 值为空

{
  "name": "foo","email": null
}

未提供电子邮件密钥

{
  "name": "foo"
}

映射到json的处理函数和结构体如下。

type PatchUserRequest struct {
    Name  *string   `json:"name"`
    Email *string   `json:"email"`
}

func (h *userHandler) HandleUserPatch(c *gin.Context) {
    userID := c.Param("userid")
    var json PatchUserRequest
    if err := c.ShouldBindJSON(&json); err != nil {
        c.JSON(http.StatusBadRequest,gin.H{"error": err.Error()})
        return
    }
    // Subsequent process 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)