fix bug that tag form:",default=1" are not effective in some cases

This commit is contained in:
Jerry 2020-05-07 00:11:49 +08:00
parent 235898e642
commit dd869c7cda
2 changed files with 17 additions and 10 deletions

View File

@ -158,12 +158,8 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
} }
return true, setArray(vs, value, field) return true, setArray(vs, value, field)
default: default:
var val string val := opt.defaultValue
if !ok { if len(vs) > 0 && vs[0] != "" {
val = opt.defaultValue
}
if len(vs) > 0 {
val = vs[0] val = vs[0]
} }
return true, setWithProperType(val, value, field) return true, setWithProperType(val, value, field)

View File

@ -62,14 +62,25 @@ func TestMappingBaseTypes(t *testing.T) {
func TestMappingDefault(t *testing.T) { func TestMappingDefault(t *testing.T) {
var s struct { var s struct {
Int int `form:",default=9"` Int int `form:",default=9"`
Slice []int `form:",default=9"` PageNo int `form:"page_no,default=1"`
Array [1]int `form:",default=9"` PageSize int `form:"page_size,default=60"`
String string `form:"string,default=9"`
Slice []int `form:",default=9"`
Array [1]int `form:",default=9"`
} }
err := mappingByPtr(&s, formSource{}, "form") form := map[string][]string{
"page_no": {""},
"page_size": {""},
"string": {"test"},
}
err := mappingByPtr(&s, formSource(form), "form")
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, 9, s.Int) assert.Equal(t, 9, s.Int)
assert.Equal(t, 1, s.PageNo)
assert.Equal(t, 60, s.PageSize)
assert.Equal(t, "test", s.String)
assert.Equal(t, []int{9}, s.Slice) assert.Equal(t, []int{9}, s.Slice)
assert.Equal(t, [1]int{9}, s.Array) assert.Equal(t, [1]int{9}, s.Array)
} }