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