请问golang的iris框架解析表单到结构体中当表单中出现结构体中不存在的值时可以继续解析吗
问题描述
golang的iris框架解析表单到结构体中当表单中出现结构体中不存在的值时停止解析
问题出现的环境背景及自己尝试过哪些方法
最近写的项目使用了iris框架的readform方法读取表单,当前端传入admin_id字段(该字段不在预定义的结构体中),iris解析到该字段后停止解析并返回错误
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
type addForm struct {
DeviceCode string `form:"device_code" validate:"required"`
Name string `form:"name" validate:"required"`
TypeID int64 `form:"type_id" validate:"required,numeric"`
TreeID int64 `form:"tree_id" validate:"required,numeric"`
ModelID int64 `form:"model_id" validate:"omitempty,numeric"`
Mrl string `form:"mrl" validate:"-"`
PurchaseTime string `form:"purchase_time" validate:"-"`
DeployTime string `form:"deploy_time" validate:"-"`
DirectionType int64 `form:"direction_type" validate:"omitempty,oneof=1 2 3"`
IsCached int64 `form:"is_cached" validate:"omitempty,oneof=0 1"`
RelayController int64 `form:"relay_controller" validate:"omitempty,oneof=0 1"`
Port int64 `form:"port" validate:"omitempty,numeric"`
Channels int64 `form:"channels" validate:"omitempty,numeric,gt=0"`
Threshold1 float64 `form:"threshold1" validate:"omitempty,numeric"`
Threshold2 float64 `form:"threshold2" validate:"omitempty,numeric"`
IsRestOpen int64 `form:"is_rest_open" validate:"omitempty,oneof=1 2"`
FunctionType int64 `form:"function_type" validate:"omitempty,numeric"`
Uri string `form:"uri" validate:"omitempty,url"`
}
var formParam addForm // 表单参数
var errP errs.Error // 程序错误
// 读取表单参数
if err := ctx.ReadForm(&formParam); err != nil {
}
// 读取管理员表单参数并验证
var admin backend.Admin
if functions.ReadForm(&admin, ctx.Request().PostForm) != nil || admin.Valid() != nil {
ctx.JSON(backend.Response(iris.Map{consts.CODE: errs.ERR_PARAM_WRONG}))
return
}
你期待的结果是什么?实际看到的错误信息又是什么?
iris在解析到不存在的字段时自动跳过。实际iris在解析到该字段不在结构体中存在时
直接结束解析并返回错误。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以使用iris.IsErrPath解决:
官方 issues 已解决这个问题
https://github.com/kataras/ir...