支持嵌套结构体验证 #1
@ -15,7 +15,6 @@ import (
|
|||||||
dynamicStructGenerate "git.zhangdeman.cn/zhangdeman/dynamic-struct"
|
dynamicStructGenerate "git.zhangdeman.cn/zhangdeman/dynamic-struct"
|
||||||
"git.zhangdeman.cn/zhangdeman/json_filter/gjson_hack"
|
"git.zhangdeman.cn/zhangdeman/json_filter/gjson_hack"
|
||||||
"git.zhangdeman.cn/zhangdeman/serialize"
|
"git.zhangdeman.cn/zhangdeman/serialize"
|
||||||
"git.zhangdeman.cn/zhangdeman/wrapper"
|
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
"github.com/tidwall/sjson"
|
"github.com/tidwall/sjson"
|
||||||
@ -75,10 +74,9 @@ func (h *handle) Run() ([]byte, error) {
|
|||||||
// 没出现异常, 但是value为nil, 视作参数不存在处理
|
// 没出现异常, 但是value为nil, 视作参数不存在处理
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fieldName := wrapper.String(field.JsonTag).SnakeCaseToCamel()
|
|
||||||
// TODO : 支持嵌套结构体
|
// TODO : 支持嵌套结构体
|
||||||
fieldTag := h.generateTag(field)
|
fieldTag := h.generateTag(field)
|
||||||
h.dynamicStruct.AddField(fieldName, "", sourceValue, fieldTag, false)
|
h.dynamicStruct.AddField(field.JsonTag, "", sourceValue, fieldTag, false)
|
||||||
}
|
}
|
||||||
val := h.dynamicStruct.Build().New()
|
val := h.dynamicStruct.Build().New()
|
||||||
if err := serialize.JSON.UnmarshalWithNumber([]byte(h.formatVal), &val); nil != err {
|
if err := serialize.JSON.UnmarshalWithNumber([]byte(h.formatVal), &val); nil != err {
|
||||||
|
@ -16,11 +16,19 @@ import (
|
|||||||
|
|
||||||
// TestRun_Simple_Data 无嵌套、无复杂数据类型的处理
|
// TestRun_Simple_Data 无嵌套、无复杂数据类型的处理
|
||||||
func TestRun_Simple_Data(t *testing.T) {
|
func TestRun_Simple_Data(t *testing.T) {
|
||||||
testMap := map[string]any{
|
userInfo := map[string]any{
|
||||||
"age": 18,
|
"age": 1800,
|
||||||
"height": 179.5,
|
"height": 179.5,
|
||||||
"name": "baicha",
|
"name": "baicha",
|
||||||
}
|
}
|
||||||
|
companyInfo := map[string]any{
|
||||||
|
"address": "beijing",
|
||||||
|
}
|
||||||
|
|
||||||
|
testMap := map[string]any{
|
||||||
|
"user": userInfo,
|
||||||
|
"company": companyInfo,
|
||||||
|
}
|
||||||
sourceByteData, _ := json.Marshal(testMap)
|
sourceByteData, _ := json.Marshal(testMap)
|
||||||
fieldList := []StructField{
|
fieldList := []StructField{
|
||||||
{
|
{
|
||||||
@ -34,15 +42,15 @@ func TestRun_Simple_Data(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
Tag: "max",
|
Tag: "max",
|
||||||
Args: []string{"20"},
|
Args: []string{"2000"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
DefaultValue: "",
|
DefaultValue: "",
|
||||||
SourcePath: "age",
|
SourcePath: "user.age",
|
||||||
TargetPath: "user_age",
|
TargetPath: "user_age",
|
||||||
Errmsg: "年龄必须在[1,20]之间",
|
Errmsg: "年龄必须在[1,2000]之间",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_, err := Run(sourceByteData, fieldList)
|
res, err := Run(sourceByteData, fieldList)
|
||||||
fmt.Println(err)
|
fmt.Println(err, string(res))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user