mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-22 09:34:33 +08:00
add support arrays on mapping
This commit is contained in:
parent
057f63b1bb
commit
0450799407
@ -1430,3 +1430,26 @@ func TestBindingTimeDuration(t *testing.T) {
|
|||||||
err = Form.Bind(req, &s)
|
err = Form.Bind(req, &s)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBindingArray(t *testing.T) {
|
||||||
|
var s struct {
|
||||||
|
Nums [2]int `form:"nums,default=4"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// default
|
||||||
|
req := formPostRequest("", "")
|
||||||
|
err := Form.Bind(req, &s)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, [2]int{4, 0}, s.Nums)
|
||||||
|
|
||||||
|
// ok
|
||||||
|
req = formPostRequest("", "nums=3&nums=8")
|
||||||
|
err = Form.Bind(req, &s)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, [2]int{3, 8}, s.Nums)
|
||||||
|
|
||||||
|
// error
|
||||||
|
req = formPostRequest("", "nums=wrong")
|
||||||
|
err = Form.Bind(req, &s)
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
@ -118,6 +118,11 @@ func tryToSetValue(value reflect.Value, field reflect.StructField, form map[stri
|
|||||||
vs = []string{defaultValue}
|
vs = []string{defaultValue}
|
||||||
}
|
}
|
||||||
return true, setSlice(vs, value, field)
|
return true, setSlice(vs, value, field)
|
||||||
|
case reflect.Array:
|
||||||
|
if !ok {
|
||||||
|
vs = []string{defaultValue}
|
||||||
|
}
|
||||||
|
return true, setArray(vs, value, field)
|
||||||
default:
|
default:
|
||||||
var val string
|
var val string
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -256,14 +261,22 @@ func setTimeField(val string, structField reflect.StructField, value reflect.Val
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setSlice(vals []string, value reflect.Value, field reflect.StructField) error {
|
func setArray(vals []string, value reflect.Value, field reflect.StructField) error {
|
||||||
slice := reflect.MakeSlice(value.Type(), len(vals), len(vals))
|
|
||||||
for i, s := range vals {
|
for i, s := range vals {
|
||||||
err := setWithProperType(s, slice.Index(i), field)
|
err := setWithProperType(s, value.Index(i), field)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setSlice(vals []string, value reflect.Value, field reflect.StructField) error {
|
||||||
|
slice := reflect.MakeSlice(value.Type(), len(vals), len(vals))
|
||||||
|
err := setArray(vals, slice, field)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
value.Set(slice)
|
value.Set(slice)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user