From f42606bf682d522d15aa2d68d5e9eec529108ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 21 Mar 2025 18:48:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=9A=84BUG=20+=20=E5=8D=87=E7=BA=A7=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E7=B1=BB=E5=9E=8B=E6=95=B0=E6=8D=AE=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=E7=9A=84=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 6 +++--- go.sum | 8 ++++++++ validate.go | 26 ++++++++++++-------------- validate_test.go | 10 +++------- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 778c81f..55ace56 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module git.zhangdeman.cn/gateway/validate go 1.24.1 require ( - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250227040546-863c03f34bb8 + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250321102241-d6e86b64f7ca git.zhangdeman.cn/zhangdeman/dynamic-struct v0.0.0-20250319072714-eab2a7abde63 - git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20241205105007-b8c8c9d4338c + git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20250321103029-786c03293a28 git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd github.com/go-playground/validator/v10 v10.25.0 github.com/tidwall/gjson v1.18.0 @@ -15,7 +15,7 @@ require ( require ( git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e // indirect - git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250302133417-c1588abcb436 // indirect + git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740 // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect diff --git a/go.sum b/go.sum index e4eb31f..6fc1460 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,13 @@ git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250227040546-863c03f34bb8 h1:VEifPc+vkpEQoX9rj7zxmT1m+IA81XjOxe7+Z1aqWNM= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250227040546-863c03f34bb8/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250321101544-734d9a9f7733 h1:j5tG00W5C+1kYLJV73Iw3wvMo212x4taUHGolf3kikQ= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250321101544-734d9a9f7733/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250321102241-d6e86b64f7ca h1:uxjzbY5fDozjyK6jkoQtuQouVTcVfXjbe3chARYSjRM= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20250321102241-d6e86b64f7ca/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20241205105007-b8c8c9d4338c h1:y8WLSdY8dBkKmazLt/XokW/LGz3hbdvNUdCUnsWXpRw= git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20241205105007-b8c8c9d4338c/go.mod h1:GzCzTobrpI6J94Cluj9gjN/o5ZdNEyrXQcfGfj05ohs= +git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20250321103029-786c03293a28 h1:wzEv9TXimkXuvjIgLuU+JETmWzj3AjfS3JA2cvU51xM= +git.zhangdeman.cn/zhangdeman/json_filter v0.0.0-20250321103029-786c03293a28/go.mod h1:RHYpM8BsZg9CuK78oY0+/n3g4kHMXk04+Gj1Sfg6E3U= git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 h1:gUDlQMuJ4xNfP2Abl1Msmpa3fASLWYkNlqDFF/6GN0Y= git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0/go.mod h1:VHb9qmhaPDAQDcS6vUiDCamYjZ4R5lD1XtVsh55KsMI= git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241223084948-de2e49144fcd h1:q7GG14qgXKB4MEXQFOe7/UYebsqMfPaSX80TcPdOosI= @@ -10,6 +16,8 @@ git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e h1:Q973S6Cc git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e/go.mod h1:VpPjBlwz8U+OxZuxzHQBv1aEEZ3pStH6bZvT21ADEbI= git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250302133417-c1588abcb436 h1:SM4zc54W2wmM72+4pMNQ8iS371H6lj4J8rj8KJKf7pw= git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250302133417-c1588abcb436/go.mod h1:YJ1FlvFgkfAHkxkt3l5rKKUqEpQkNMbCFDzDmgteEU8= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740 h1:zPUoylfJTbc0EcxW+NEzOTBmoeFZ2I/rLFBnEzxb4Wk= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20250321102712-1cbfbe959740/go.mod h1:1ct92dbVc49pmXusA/iGfcQUJzcYmJ+cjAhgc3sDv1I= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= diff --git a/validate.go b/validate.go index d4de74a..29f35ea 100644 --- a/validate.go +++ b/validate.go @@ -88,19 +88,14 @@ func (h *handle) Run() ([]byte, error) { Args: nil, }) } - sourceValue, err := h.getSourceDataValue(field) - if nil != err { + // 格式化数据 + if _, err := h.formatDataValue(field); nil != err { return nil, err } // 支持嵌套结构体 fieldTag := h.generateTag(field) - if nil == sourceValue { - // 没出现异常, 但是value为nil, 视作参数不存在处理 - // TODO: 这里需要设置为对应类型的零值 - h.dynamicStruct.AddField(field.JsonTag, "", "", fieldTag, false) - continue - } - h.dynamicStruct.AddField(field.JsonTag, "", sourceValue, fieldTag, false) + // 这里需要设置为对应类型的零值就行, 此处传入值的目的只是为了确认数据类型 + h.dynamicStruct.AddField(field.JsonTag, "", consts.GetDataTypeDefaultValue(field.Type), fieldTag, false) } val := h.dynamicStruct.Build().New() if err := serialize.JSON.UnmarshalWithNumber([]byte(h.formatVal), &val); nil != err { @@ -139,7 +134,7 @@ func (h *handle) checkRequired(field StructField) (bool, bool) { } // getSourceDataValue 获取源数据值 -func (h *handle) getSourceDataValue(field StructField) (any, error) { +func (h *handle) formatDataValue(field StructField) (any, error) { sourceValue := gjson.GetBytes(h.sourceData, field.SourcePath) if !sourceValue.Exists() { if field.Required { @@ -171,6 +166,7 @@ func (h *handle) getSourceDataValue(field StructField) (any, error) { } }() switch field.Type { + case consts.DataTypeInt: // Int类型 fallthrough case consts.DataTypeIntPtr: // Uint类型 @@ -181,15 +177,17 @@ func (h *handle) getSourceDataValue(field StructField) (any, error) { case consts.DataTypeUintPtr: // Uint类型 val, err = gjson_hack.Uint(sourceValue) return val, err - case consts.DataTypeFloat: + case consts.DataTypeFloat32: fallthrough - case consts.DataTypeFloatPtr: // Float类型 + case consts.DataTypeFloat32Ptr: // Float类型 val, err = gjson_hack.Float64(sourceValue) return val, err case consts.DataTypeString: // String类型 - return sourceValue.String(), nil + val = sourceValue.String() + return val, nil case consts.DataTypeBool: // Bool类型 - return sourceValue.Bool(), nil + val = sourceValue.Bool() + return val, nil case consts.DataTypeSliceFloat: // Float slice val, err = gjson_hack.SliceFloat(sourceValue) return val, err diff --git a/validate_test.go b/validate_test.go index 6e57a99..c21720c 100644 --- a/validate_test.go +++ b/validate_test.go @@ -23,6 +23,7 @@ func TestRun_Simple_Data(t *testing.T) { } companyInfo := map[string]any{ "address": "beijing", + "name": "xxxx", } testMap := map[string]any{ @@ -56,17 +57,12 @@ func TestRun_Simple_Data(t *testing.T) { Required: false, RuleList: []Rule{ { - Tag: "min", - Args: []string{"1"}, - }, - { - Tag: "max", - Args: []string{"20"}, + Tag: "required", }, }, DefaultValue: "", SourcePath: "company.name", - TargetPath: "company.cname", + TargetPath: "company.company_name", Errmsg: "公司名称必须在[1,20]之间", }, {