微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何检测请求正文中的 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 举报,一经查实,本站将立刻删除。