Go 当输入错误时,BindJSON不会返回错误

Go 当输入错误时,BindJSON不会返回错误,go,go-gin,Go,Go Gin,以下是我正在尝试的 func TestCreteJob(t *testing.T) { requestBody, err := json.Marshal(map[string]string{ "username": "u1", "password": "p1", }) if err != nil { t.Errorf("Test Failed ") } res, err := http.Post("http

以下是我正在尝试的

func TestCreteJob(t *testing.T) {
    requestBody, err := json.Marshal(map[string]string{
        "username": "u1",
        "password": "p1",
    })
    if err != nil {
        t.Errorf("Test Failed ")
    }

    res, err := http.Post("http://127.0.0.1:9090/job", "application/json", bytes.NewBuffer(requestBody))
    if err != nil {
        log.Fatal(err)
    }
    greeting, err := ioutil.ReadAll(res.Body)
    res.Body.Close()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", greeting)
}

我的处理程序如下所示

func Handlers() *gin.Engine {
    router := gin.Default()

    // Sample API
    router.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    router.POST("/job", func(c *gin.Context) {
        if c.Request.Method == "POST" {
            var u User
            err := c.BindJSON(&u)
            if err != nil {
                c.AbortWithError(http.StatusBadRequest, err)
            }
            c.JSON(http.StatusOK, gin.H{
                "user": u.Username,
                "pass": u.Password,
            })
        }
    })
    return router
}
我将对象定义为

type User struct {
   Username string `json: abc`
   Password string `json: password`
}
这应该失败,因为输入没有“abc”
我在这里做错了什么。

您的结构标记对于json是错误的

type User struct {
   Username string `json:"abc"`
   Password string `json:"password"`
}
看看这里


谢谢你的评论。当json如下
dataz:=[]字节(
{abc11:“sberry”,“password:“hunter2”}
@Avinash时会发生什么情况
密码将被取消签名,但
abc11
将不会,因为它不匹配目标结构中的任何标记,并且结构的
用户名
字段带有标记
abc
,将保持不变。如果希望失败,首先必须为字段指定一些“绑定”验证规则。看见例如
用户名字符串`json:“abc”绑定:“Required”`
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    fmt.Println("Hello, playground")

    dataz := []byte(`{"abc": "sberry", "password": "hunter2"}`)

    var u User

    err := json.Unmarshal(dataz, &u)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%+v\n", u)
}

type User struct {
    Username string `json:"abc"`
    Password string `json:"password"`
}