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) }