mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-11 16:20:37 +08:00
Merge f2443d1877cbc6636c505bef73a7869ba1eb0836 into b2b489dbf4826c2c630717a77fd5e42774625410
This commit is contained in:
commit
be63befeb2
@ -231,19 +231,24 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
|
|||||||
|
|
||||||
switch value.Kind() {
|
switch value.Kind() {
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
if len(vs) == 0 {
|
if vs == nil {
|
||||||
if !opt.isDefaultExists {
|
if !opt.isDefaultExists {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
vs = []string{opt.defaultValue}
|
|
||||||
// pre-process the default value for multi if present
|
// pre-process the default value for multi if present
|
||||||
cfTag := field.Tag.Get("collection_format")
|
cfTag := field.Tag.Get("collection_format")
|
||||||
if cfTag == "" || cfTag == "multi" {
|
if cfTag == "" || cfTag == "multi" {
|
||||||
vs = strings.Split(opt.defaultValue, ",")
|
vs = strings.Split(opt.defaultValue, ",")
|
||||||
|
} else {
|
||||||
|
vs = []string{opt.defaultValue}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(vs) == 0 {
|
||||||
|
return true, setSlice(vs, value, field)
|
||||||
|
}
|
||||||
|
|
||||||
if ok, err = trySetCustom(vs[0], value); ok {
|
if ok, err = trySetCustom(vs[0], value); ok {
|
||||||
return ok, err
|
return ok, err
|
||||||
}
|
}
|
||||||
@ -259,11 +264,12 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
vs = []string{opt.defaultValue}
|
|
||||||
// pre-process the default value for multi if present
|
// pre-process the default value for multi if present
|
||||||
cfTag := field.Tag.Get("collection_format")
|
cfTag := field.Tag.Get("collection_format")
|
||||||
if cfTag == "" || cfTag == "multi" {
|
if cfTag == "" || cfTag == "multi" {
|
||||||
vs = strings.Split(opt.defaultValue, ",")
|
vs = strings.Split(opt.defaultValue, ",")
|
||||||
|
} else {
|
||||||
|
vs = []string{opt.defaultValue}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -689,7 +689,7 @@ func TestMappingEmptyValues(t *testing.T) {
|
|||||||
// field present but empty
|
// field present but empty
|
||||||
err = mappingByPtr(&s, formSource{"slice": {}}, "form")
|
err = mappingByPtr(&s, formSource{"slice": {}}, "form")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, []int{5}, s.Slice)
|
assert.Equal(t, []int{}, s.Slice)
|
||||||
|
|
||||||
// field present with values
|
// field present with values
|
||||||
err = mappingByPtr(&s, formSource{"slice": {"1", "2", "3"}}, "form")
|
err = mappingByPtr(&s, formSource{"slice": {"1", "2", "3"}}, "form")
|
||||||
@ -718,10 +718,15 @@ func TestMappingEmptyValues(t *testing.T) {
|
|||||||
Slice []int `form:"slice"`
|
Slice []int `form:"slice"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// field present but empty
|
// field not present
|
||||||
err := mappingByPtr(&s, formSource{"slice": {}}, "form")
|
err := mappingByPtr(&s, formSource{}, "form")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, []int(nil), s.Slice)
|
assert.Equal(t, []int(nil), s.Slice)
|
||||||
|
|
||||||
|
// field present but empty
|
||||||
|
err = mappingByPtr(&s, formSource{"slice": {}}, "form")
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, []int{}, s.Slice)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("array without default", func(t *testing.T) {
|
t.Run("array without default", func(t *testing.T) {
|
||||||
@ -750,7 +755,7 @@ func TestMappingEmptyValues(t *testing.T) {
|
|||||||
// field present but empty
|
// field present but empty
|
||||||
err = mappingByPtr(&s, formSource{"slice_multi": {}, "slice_csv": {}}, "form")
|
err = mappingByPtr(&s, formSource{"slice_multi": {}, "slice_csv": {}}, "form")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, []int{1, 2, 3}, s.SliceMulti)
|
assert.Equal(t, []int{}, s.SliceMulti)
|
||||||
assert.Equal(t, []int{1, 2, 3}, s.SliceCsv)
|
assert.Equal(t, []int{}, s.SliceCsv)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user