Procházet zdrojové kódy

allow ignoring field on form mapping (#1733)

André Bazaglia před 6 roky
rodič
revize
48f6c6137c
2 změnil soubory, kde provedl 28 přidání a 0 odebrání
  1. 25 0
      binding/binding_test.go
  2. 3 0
      binding/form_mapping.go

+ 25 - 0
binding/binding_test.go

@@ -61,6 +61,10 @@ type FooStructForMapType struct {
 	MapFoo map[string]interface{} `form:"map_foo"`
 }
 
+type FooStructForIgnoreFormTag struct {
+	Foo *string `form:"-"`
+}
+
 type InvalidNameType struct {
 	TestName string `invalid_name:"test_name"`
 }
@@ -278,6 +282,12 @@ func TestBindingFormForTime2(t *testing.T) {
 		"", "")
 }
 
+func TestFormBindingIgnoreField(t *testing.T) {
+	testFormBindingIgnoreField(t, "POST",
+		"/", "/",
+		"-=bar", "")
+}
+
 func TestBindingFormInvalidName(t *testing.T) {
 	testFormBindingInvalidName(t, "POST",
 		"/", "/",
@@ -860,6 +870,21 @@ func testFormBindingForTimeFailLocation(t *testing.T, method, path, badPath, bod
 	assert.Error(t, err)
 }
 
+func testFormBindingIgnoreField(t *testing.T, method, path, badPath, body, badBody string) {
+	b := Form
+	assert.Equal(t, "form", b.Name())
+
+	obj := FooStructForIgnoreFormTag{}
+	req := requestWithBody(method, path, body)
+	if method == "POST" {
+		req.Header.Add("Content-Type", MIMEPOSTForm)
+	}
+	err := b.Bind(req, &obj)
+	assert.NoError(t, err)
+
+	assert.Nil(t, obj.Foo)
+}
+
 func testFormBindingInvalidName(t *testing.T, method, path, badPath, body, badBody string) {
 	b := Form
 	assert.Equal(t, "form", b.Name())

+ 3 - 0
binding/form_mapping.go

@@ -41,6 +41,9 @@ func mapFormByTag(ptr interface{}, form map[string][]string, tag string) error {
 				defaultValue = defaultList[1]
 			}
 		}
+		if inputFieldName == "-" {
+			continue
+		}
 		if inputFieldName == "" {
 			inputFieldName = typeField.Name