go - 如何检测请求正文中的 json 是否具有键的空值或未给出键
问题描述
我正在使用 Go gin 框架创建一个 API 服务器。现在我尝试为端点添加PATCH
操作。操作接收 json 请求正文中的部分属性并更新 User 模型的属性。在这种情况下,未出现在 json 正文中的属性将保持原样。/users
PATCH
我使用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
}
解决方案
推荐阅读
- javascript - Node.js Javascript数组随机函数总是在触发命令时给出第一个
- java - 是否有正确的方法来关闭在 java 流 api 中打开的资源(对于每个元素)?
- ios - 将数据从 UITableView 传递到 UICollectionView
- rabbitmq - Apache Beam:RabbitMqIO 水印不前进
- ios - 如何在表结构(数组)中包含 URL 并在 didSelectRowAt 中调用它们?
- powershell - 如何在不启动新的 Powershell 会话的情况下强制重新加载模块函数定义?
- python - 生成斜率的随机图
- linux - Python,多线程,套接字有时无法创建
- python - 如何在 Visual Studio Code 中调试现有的 lambda?
- c++ - 如何使用 decltype 获取向量元素的类型作为模板参数