我是 Golang 的新手。
golang 版本:1.17.8
驗證器:“ github.com/go-playground/validator/v10 ”
我想在加載到嵌套結構資料結構后驗證傳入的 JSON 有效負載。這是我傳入的 JSON 有效負載,
{
"name": "Yomiko",
"address": {
"city": "Tokyo",
"street": "Shibaura St"
},
"children":[
{
"lastName": "Takayashi"
}
],
"isEmployed": false
}
這是我的 user.go 檔案,
package main
type User struct {
Name string
Address *Address `validate:"required"`
Children []*Child
IsEmployed *bool `validate:"required"`
}
type Address struct {
City string `validate:"required"`
Street string `validate:"required"`
}
type Child struct {
Title string `validate:"required"`
FirstName string
LastName string `validate:"required"`
}
這是我的測驗功能,
func TestUserPayload(t *testing.T) {
actualUserPayload := NewUserPayloadFromFile("userpayload.json")
validate := validator.New()
err := validate.Struct(actualUserPayload)
if err != nil {
t.Error("Validation Error: ", err)
}
}
該測驗通過。但是,我預計它會失敗,因為Child.Title被標記為required。我預計會出現以下錯誤,
Validation Error: Key: 'Child.Title' Error:Field validation for 'Title' failed on the 'required' tag
但是,當我遍歷子切片并按如下方式驗證每個子結構時,測驗按預期失敗,
func TestUserPayload(t *testing.T) {
actualUserPayload := NewUserPayloadFromFile("userpayload.json")
validate := validator.New()
err := validate.Struct(actualUserPayload)
if err != nil {
t.Error("Validation Error: ", err)
}
children := actualUserPayload.Children
for _, child := range children {
err := validate.Struct(child)
if err != nil {
t.Error("Validation Error: ", err)
}
}
}
有沒有一種直接的方法來驗證一片結構中的專案?
uj5u.com熱心網友回復:
根據驗證器包的檔案,您可以dive
在 struct 標簽中使用來獲取此行為。這會導致驗證器也驗證嵌套的結構/切片/等。
因此,您需要將User
結構更新為:
type User struct {
Name string
Address *Address `validate:"required"`
Children []*Child `validate:"dive"`
IsEmployed *bool `validate:"required"`
}
它在Go Playground中作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/492112.html