首页 > 解决方案 > 如何检测请求正文中的 json 是否具有键的空值或未给出键

问题描述

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

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

电子邮件键的值为空

{
  "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 
}

标签: gogo-gin

解决方案


推荐阅读