mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-24 19:09:57 +08:00
support map for form-post
This commit is contained in:
parent
c2f083fc95
commit
25290cc14c
@ -5,7 +5,9 @@
|
|||||||
package binding
|
package binding
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -74,6 +76,20 @@ func mapForm(ptr interface{}, form map[string][]string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val.Field(i).Set(slice)
|
val.Field(i).Set(slice)
|
||||||
|
} else if structFieldKind == reflect.Map {
|
||||||
|
m := make(map[string]interface{})
|
||||||
|
err := json.Unmarshal([]byte(inputValue[0]), &m)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
structField = reflect.Indirect(structField)
|
||||||
|
structField = reflect.MakeMap(structField.Type())
|
||||||
|
for k, v := range m {
|
||||||
|
structField.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(v))
|
||||||
|
}
|
||||||
|
|
||||||
|
val.Field(i).Set(structField)
|
||||||
} else {
|
} else {
|
||||||
if _, isTime := structField.Interface().(time.Time); isTime {
|
if _, isTime := structField.Interface().(time.Time); isTime {
|
||||||
if err := setTimeField(inputValue[0], typeField, structField); err != nil {
|
if err := setTimeField(inputValue[0], typeField, structField); err != nil {
|
||||||
@ -119,6 +135,7 @@ func setWithProperType(valueKind reflect.Kind, val string, structField reflect.V
|
|||||||
return setFloatField(val, 64, structField)
|
return setFloatField(val, 64, structField)
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
structField.SetString(val)
|
structField.SetString(val)
|
||||||
|
fmt.Println(structField.Interface())
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if !structField.Elem().IsValid() {
|
if !structField.Elem().IsValid() {
|
||||||
structField.Set(reflect.New(structField.Type().Elem()))
|
structField.Set(reflect.New(structField.Type().Elem()))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user