当输入错误时,绑定 JSON 不会返回错误



以下是我正在尝试的

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"`
}

看看这里 https://play.golang.org/p/oj_PwLoX5qs

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("%+vn", u)
}
type User struct {
Username string `json:"abc"`
Password string `json:"password"`
}

最新更新