diff --git a/bind.go b/bind.go index 507def3ea..877c0f5c4 100644 --- a/bind.go +++ b/bind.go @@ -159,6 +159,10 @@ func (b *DefaultBinder) bindData(destination interface{}, data map[string][]stri for k, v := range data { if isElemString { val.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(v[0])) + } else if isElemInterface { + // To maintain backward compatibility, we always bind to the first string value + // and not the slice of strings when dealing with map[string]interface{}{} + val.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(v[0])) } else { val.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(v)) } diff --git a/bind_test.go b/bind_test.go index db7693cb9..fc0c00598 100644 --- a/bind_test.go +++ b/bind_test.go @@ -497,8 +497,8 @@ func TestDefaultBinder_bindDataToMap(t *testing.T) { assert.NoError(t, new(DefaultBinder).bindData(&dest, exampleData, "param")) assert.Equal(t, map[string]interface{}{ - "multiple": []string{"1", "2"}, - "single": []string{"3"}, + "multiple": "1", + "single": "3", }, dest, ) @@ -509,8 +509,8 @@ func TestDefaultBinder_bindDataToMap(t *testing.T) { assert.NoError(t, new(DefaultBinder).bindData(&dest, exampleData, "param")) assert.Equal(t, map[string]interface{}{ - "multiple": []string{"1", "2"}, - "single": []string{"3"}, + "multiple": "1", + "single": "3", }, dest, )