From fad858143a1b075cf2ce33cfe4d2dfedc102495d 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, 17 May 2024 14:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20map[string]string=20?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- define/rule.go | 2 +- go.mod | 5 +++-- go.sum | 6 ++++++ handle_map.go | 29 +++++++++++++++++++++++++++++ run.go | 4 +++- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/define/rule.go b/define/rule.go index 9e50a44..29e1f38 100644 --- a/define/rule.go +++ b/define/rule.go @@ -21,7 +21,7 @@ type FieldRule struct { AllowEmpty bool `json:"allow_empty"` // 必传时空字符串是否合法 AllowZero bool `json:"allow_zero"` // 必传数字, 0 是否合法 AllowNil bool `json:"allow_nil"` // 必传时, nil值是否合法 - AutoTrimSpace bool `json:"auto_trim_space"` // 自动去除前后空格 + DisableAutoTrimSpace bool `json:"disable_auto_trim_space"` // 自动去除前后空格 DisableAutoConvert bool `json:"disable_auto_convert"` // 禁用自动格式转换, 不禁用情况下, ["1","2","3"] 可以转换成 [1,2,3] , "12.34" 可以转换成 12.34 RequiredConditionGroup [][]RequiredCondition `json:"required_condition_group"` // 满足何种条件,字段必传,不配置则为无差别必传, 组之间是或条件, 满足一组即命中, 组之内为与条件 ValueLimit *ValueLimit `json:"value_limit"` // 数据值的限制 diff --git a/go.mod b/go.mod index c308bfc..8784c91 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,10 @@ module git.zhangdeman.cn/gateway/validator go 1.22.2 require ( - git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc + git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240517060653-203cc568fbec git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20240325080031-1f58204e8687 git.zhangdeman.cn/zhangdeman/util v0.0.0-20231227095334-7eb5cdbf9253 - git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240422034417-8c922be06d95 + git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240506070032-e228983e7306 github.com/stretchr/testify v1.9.0 github.com/tidwall/gjson v1.17.1 github.com/tidwall/sjson v1.2.5 @@ -14,6 +14,7 @@ require ( require ( git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20240311030808-e2a2e6a3c211 // indirect + git.zhangdeman.cn/zhangdeman/op_type v0.0.0-20240122104027-4928421213c0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 35d308b..93ec001 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,19 @@ git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc h1:kPz9xiUVruM8kwbUUVpxyCTX8pGgyKt60K5zX77oyC4= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240501142503-e31a270e50cc/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240517060653-203cc568fbec h1:ENemx9RGAU9nqpPYC4S6C/Dnw9gwcx96+sTISG/6rsY= +git.zhangdeman.cn/zhangdeman/consts v0.0.0-20240517060653-203cc568fbec/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20240311030808-e2a2e6a3c211 h1:I/wOsRpCSRkU9vo1u703slQsmK0wnNeZzsWQOGtIAG0= git.zhangdeman.cn/zhangdeman/easymap v0.0.0-20240311030808-e2a2e6a3c211/go.mod h1:SrtvrQRdzt+8KfYzvosH++gWxo2ShPTzR1m3VQ6uX7U= +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-20240325080031-1f58204e8687 h1:uQcGqdzi4UdpZlp4f4FUPeBqoygP58pEKJkmN3ROsE0= git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20240325080031-1f58204e8687/go.mod h1:gf7SW2TXATgux8pfdFedMkXWv2515OtIIM/5c4atkFw= git.zhangdeman.cn/zhangdeman/util v0.0.0-20231227095334-7eb5cdbf9253 h1:GO3oZa5a2sqwAzGcLDJtQzmshSWRmoP7IDS8bwFqvC4= git.zhangdeman.cn/zhangdeman/util v0.0.0-20231227095334-7eb5cdbf9253/go.mod h1:VpPjBlwz8U+OxZuxzHQBv1aEEZ3pStH6bZvT21ADEbI= git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240422034417-8c922be06d95 h1:3lO4ap9p7kEA+4yL5ojG9mAWsz5sY28Nu2tSzAZEehw= git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240422034417-8c922be06d95/go.mod h1:Fo4XOiZPua4E4/Qzy3ZYS5zyd15bS/lsb3t6S6PQFGY= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240506070032-e228983e7306 h1:Iy36ouA7TecVwBY1QTJfWIYNU2d39+APEfOhBC4gvic= +git.zhangdeman.cn/zhangdeman/wrapper v0.0.0-20240506070032-e228983e7306/go.mod h1:7vFN7QrHLLI/iN7ZrJSU0bw/7TyaYjVQ4+clYuIoRrY= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= diff --git a/handle_map.go b/handle_map.go index d488261..728afdc 100644 --- a/handle_map.go +++ b/handle_map.go @@ -68,6 +68,35 @@ func handleMapStringAny(inputVal any, rule *define.FieldRule) (map[string]any, e return res, nil } +// handleMapStringString ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 14:07 2024/5/17 +func handleMapStringString(inputVal any, rule *define.FieldRule) (map[string]any, error) { + var ( + err error + res map[string]string + ) + + if err = strOrMapConvert(inputVal, &res); nil != err { + return nil, err + } + + formatData := make(map[string]any) + dataFieldTable := make(map[string]string) + for k, v := range res { + dataFieldTable[k] = k + formatData[k] = v + } + + if err = validateMap(dataFieldTable, rule); nil != err { + return nil, err + } + + return formatData, nil +} + // handleMapStringSlice... // // Author : go_developer@163.com<白茶清欢> diff --git a/run.go b/run.go index 2c4caf1..844ad90 100644 --- a/run.go +++ b/run.go @@ -160,7 +160,7 @@ func formatInputVal(val gjson.Result, rule *define.FieldRule) (any, error) { } } else { if inputValStr, ok := inputVal.(string); ok { - if rule.AutoTrimSpace { + if !rule.DisableAutoTrimSpace { // 自动去空格 inputVal = strings.TrimSpace(inputValStr) } else { @@ -234,6 +234,8 @@ func handleData(inputVal any, rule *define.FieldRule) (any, error) { return handleMapStringFloat(inputVal, rule) case consts.DataTypeMapStrAny: // 对象结构 return handleMapStringAny(inputVal, rule) + case consts.DataTypeMapStrStr: // 对象结构 + return handleMapStringString(inputVal, rule) case consts.DataTypeMapStrSlice: // map列表 return handleMapStringSlice(inputVal, rule) case consts.DataTypeMapAnyAny: // 任意类型map