From 9883d058069228492a3072484d1d2108d9e347a2 Mon Sep 17 00:00:00 2001 From: Jerry Date: Wed, 6 May 2020 10:25:23 +0800 Subject: [PATCH] fix bug that tag `form:",default=1"` are not effective in some cases, e.g: http://host/list?page_no=&page_size= --- binding/form_mapping.go | 4 +++- binding/form_mapping_test.go | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/binding/form_mapping.go b/binding/form_mapping.go index b81ad195..718eb054 100644 --- a/binding/form_mapping.go +++ b/binding/form_mapping.go @@ -163,8 +163,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][ val = opt.defaultValue } - if len(vs) > 0 { + if len(vs) > 0 && vs[0] != "" { val = vs[0] + } else { + val = opt.defaultValue } return true, setWithProperType(val, value, field) } diff --git a/binding/form_mapping_test.go b/binding/form_mapping_test.go index 2a560371..dfa9b6d5 100644 --- a/binding/form_mapping_test.go +++ b/binding/form_mapping_test.go @@ -62,14 +62,22 @@ func TestMappingBaseTypes(t *testing.T) { func TestMappingDefault(t *testing.T) { var s struct { - Int int `form:",default=9"` - Slice []int `form:",default=9"` - Array [1]int `form:",default=9"` + Int int `form:",default=9"` + PageNo int `form:"page_no,default=9"` + 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": []string{""}, + "string": []string{""}, + } + err := mappingByPtr(&s, formSource(form), "form") assert.NoError(t, err) assert.Equal(t, 9, s.Int) + assert.Equal(t, 9, s.PageNo) + assert.Equal(t, "9", s.String) assert.Equal(t, []int{9}, s.Slice) assert.Equal(t, [1]int{9}, s.Array) }