如何从gin绑定/验证中获取带有错误的字段?

时间:2018-08-19 19:04:59

标签: validation go go-gin

我有此代码:

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

type TestForm struct {
    Age  int    `form:"age" binding:"required"`
    Name string `form:"name" binding:"required"`
}

func home(c *gin.Context) {
    c.HTML(200, "index.html", nil)
}

func homePost(c *gin.Context) {
    var f TestForm
    err := c.Bind(&f)
    c.String(200, fmt.Sprintf("%v : %v", err, f))
}

func main() {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
    r.Use(gin.Recovery())
    r.GET("/", home)
    r.POST("/", homePost)
    r.Run()
}

and templates / index.html:

<!doctype html>
<html>
<head></head>
<body>
<h1>hello</h1>
<form action="/" method="POST">
<input type="text" name="name">
<input type="text" name="age"> 
<input type="submit">

</form>
</body>
</html>

当字段绑定/验证失败时,我想遍历所有字段,以便在匹配字段上呈现HTML错误。

如果在name留空age的情况下输入 test ,则响应为:

Key: 'TestForm.Age' Error:Field validation for 'Age' failed on the 'required' tag : {0 asd}

我发现从err返回的err := c.Bind(&f)validator.ValidationErrors类型,可以让我精确地做到这一点,到目前为止一切都很好。

但是,如果我将 test 输入为name,将abc输入为age`(或者前夕,只需输入一个带空格的数字),则响应如下: / p>

strconv.ParseInt: parsing "abc": invalid syntax : {0 }

因此,只是一个通用错误,即某个地方无法解析整数。

现在,我无法知道哪个字段失败,也无法获取有关其他字段验证失败的信息。杜松子酒有没有办法告诉我age字段在这种情况下失败了?

0 个答案:

没有答案