请问golang的iris框架解析表单到结构体中当表单中出现结构体中不存在的值时可以继续解析吗

发布于 2022-09-11 16:47:32 字数 2040 浏览 31 评论 0

问题描述

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

手长情犹 2022-09-18 16:47:33

可以使用iris.IsErrPath解决:

import (
    "github.com/kataras/iris"
)

// 读取参数
    if err := c.Ctx.ReadForm(&listAct); err != nil && !iris.IsErrPath(err) {
        
    }

官方 issues 已解决这个问题
https://github.com/kataras/ir...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文