type RequestData struct {
Type string `json:"type"`
Hook string `json:"hook"`
Description []DescItem `json:"desc"`
}
var rData RequestData
// 解析请求体中的 JSON 数据到 requestData 结构体
if err := c.ShouldBindJSON(&rData); err != nil {
e.Error(http.StatusInternalServerError, err, "bind json fail!")
return
}
structValue := reflect.ValueOf(rData)
// 遍历结构体字段 检查传参数
for i := 0; i < structValue.NumField(); i++ {
field := structValue.Field(i)
fieldName := structValue.Type().Field(i).Tag.Get("json")
// 如果字段的类型是零值或空字符串,报告字段缺失
if isEmptyValue(field) {
fmt.Println(fmt.Sprintf("缺少字段:%s", fieldName))
msg := fmt.Sprintf("缺少字段:%s", fieldName)
e.Error(http.StatusBadRequest, e.Errors, msg)
return
}
}
func isEmptyValue(v reflect.Value) bool {
switch v.Kind() {
case reflect.String:
return v.String() == ""
default:
// 更多类型的判断可以根据实际需求扩展
return false
}
}
go API接口参数校验
最新推荐文章于 2024-04-26 13:53:30 发布