From 25290cc14c88dba5477c2424ee271d70e9be8a59 Mon Sep 17 00:00:00 2001 From: thinkerou Date: Sun, 10 Jun 2018 12:46:46 +0800 Subject: [PATCH] support map for form-post --- binding/form_mapping.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/binding/form_mapping.go b/binding/form_mapping.go index 3f6b9bfa..c2b7375a 100644 --- a/binding/form_mapping.go +++ b/binding/form_mapping.go @@ -5,7 +5,9 @@ package binding import ( + "encoding/json" "errors" + "fmt" "reflect" "strconv" "strings" @@ -74,6 +76,20 @@ func mapForm(ptr interface{}, form map[string][]string) error { } } 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 { if _, isTime := structField.Interface().(time.Time); isTime { 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) case reflect.String: structField.SetString(val) + fmt.Println(structField.Interface()) case reflect.Ptr: if !structField.Elem().IsValid() { structField.Set(reflect.New(structField.Type().Elem()))