Skip to content

Commit 7540ee9

Browse files
author
奇淼(piexlmax
committed
[fixed]:解决无法深层校验的bug #1283
1 parent 7bfad03 commit 7540ee9

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

server/utils/validator.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ func Verify(st interface{}, roleMap Rules) (err error) {
137137
for i := 0; i < num; i++ {
138138
tagVal := typ.Field(i)
139139
val := val.Field(i)
140+
if tagVal.Type.Kind() == reflect.Struct {
141+
if err = Verify(val.Interface(), roleMap); err != nil {
142+
return err
143+
}
144+
}
140145
if len(roleMap[tagVal.Name]) > 0 {
141146
for _, v := range roleMap[tagVal.Name] {
142147
switch {

server/utils/validator_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package utils
2+
3+
import (
4+
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
5+
"testing"
6+
)
7+
8+
type PageInfoTest struct {
9+
PageInfo request.PageInfo
10+
Name string
11+
}
12+
13+
func TestVerify(t *testing.T) {
14+
PageInfoVerify := Rules{"Page": {NotEmpty()}, "PageSize": {NotEmpty()}, "Name": {NotEmpty()}}
15+
var testInfo PageInfoTest
16+
testInfo.Name = "test"
17+
testInfo.PageInfo.Page = 0
18+
testInfo.PageInfo.PageSize = 0
19+
err := Verify(testInfo, PageInfoVerify)
20+
if err == nil {
21+
t.Error("校验失败,未能捕捉0值")
22+
}
23+
testInfo.Name = ""
24+
testInfo.PageInfo.Page = 1
25+
testInfo.PageInfo.PageSize = 10
26+
err = Verify(testInfo, PageInfoVerify)
27+
if err == nil {
28+
t.Error("校验失败,未能正常检测name为空")
29+
}
30+
testInfo.Name = "test"
31+
testInfo.PageInfo.Page = 1
32+
testInfo.PageInfo.PageSize = 10
33+
err = Verify(testInfo, PageInfoVerify)
34+
if err != nil {
35+
t.Error("校验失败,未能正常通过检测")
36+
}
37+
}

0 commit comments

Comments
 (0)