json - 将json解组到结构时如何不允许空字段
问题描述
我的请求确实有这个结构
type RequestBody struct {
ForkliftID string `json:"forklift_id"`
WarehouseID string `json:"warehouse_id,omitempty"`
TaskID string `json:"task_id"`
}
如果我不在"forklift_id"
json 请求正文中发送,解组分配“”而不返回错误,我想知道是否有类似的东西
`json: "forklift_id,notempty"`
因此,如果该字段不存在或为空,则解组会返回错误。
提前致谢
解决方案
我假设您所做的(将有效负载中的空值视为错误)是出于验证目的。如果是这样,我认为您可以使用@colminator 答案,或者尝试使用旨在解决此特定问题的第 3 方库。一个示例库是https://github.com/go-playground/validator。
type RequestBody struct {
ForkliftID string `json:"forklift_id" validate:"required"`
WarehouseID string `json:"warehouse_id" validate:"required"`
TaskID string `json:"task_id"`
}
// ...
var payload RequestBody
// ...
validate := validator.New()
err := validate.Struct(payload)
if err != nil {
// handle the error
}
validate:"required"
调用时将验证带有标签的字段validate.Struct()
。
除了required
.
有关更详细的示例,请查看示例源代码
另一种替代解决方案是通过对这些结构的字段执行显式检查。例子:
// ...
if payload.ForkliftID == "" {
err = fmt.Errorf("Forklift ID cannot be empty")
}
if payload.WarehouseID == "" {
err = fmt.Errorf("Warehouse ID cannot be empty")
}
推荐阅读
- php - 当我收到错误时系统无法创建文件“/footer.php.lock”(如 EUID:1000,EGID:1002 1002)权限被拒绝
- node.js - 我正在编写此脚本,但它正在显示或未知操作员
- php - Google reCaptcha v2(复选框)验证
- c# - 在 C# NUnit 中是否有任何替代方法用于 AssemblyTearDown
- python - 运行部分python代码一段时间,然后继续休息
- javascript - 如何在按钮的帮助下重定向网页
- sql - 如何在开始和结束日期中输入小时和分钟
- android-studio - 如何修复android studio中的gradle错误
- c# - 在 .net 标准库中编译时创建动态枚举
- php - 在 const ENTRIES1 = [] 中获取 mysql json 数据