diff --git a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java index 9332e28798b..fb3a6ef3c3d 100644 --- a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java +++ b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java @@ -53,7 +53,7 @@ class WebRequestDataBinderTests { void bindingWithNestedObjectCreation() { TestBean tb = new TestBean(); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); binder.registerCustomEditor(ITestBean.class, new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { @@ -74,7 +74,7 @@ class WebRequestDataBinderTests { void bindingWithNestedObjectCreationThroughAutoGrow() { TestBean tb = new TestBeanWithConcreteSpouse(); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); binder.setIgnoreUnknownFields(false); MockHttpServletRequest request = new MockHttpServletRequest(); @@ -316,7 +316,7 @@ class WebRequestDataBinderTests { void shouldNotTriggerBindingWhenFieldIsNotAllowed() { TestBean tb = new TestBean(); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); binder.setAllowedFields("name"); MockHttpServletRequest request = new MockHttpServletRequest(); @@ -332,7 +332,7 @@ class WebRequestDataBinderTests { void shouldNotTriggerBindingWhenFieldIsDisallowed() { TestBean tb = new TestBean(); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); binder.setDisallowedFields("country"); MockHttpServletRequest request = new MockHttpServletRequest(); @@ -344,12 +344,47 @@ class WebRequestDataBinderTests { assertThat(tb.getCountry()).isNull(); } + @Test + void shouldNotTriggerBindingWhenFieldIsNotAllowedWithEmptyArrayIndex() { + TestBean tb = new TestBean(); + + WebRequestDataBinder binder = new WebRequestDataBinder(tb); + binder.setAllowedFields("name"); + + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addParameter("name", "spring"); + request.addParameter(prefix + "stringArray[]", "ONE"); + request.addParameter(prefix + "stringArray[]", "TWO"); + binder.bind(new ServletWebRequest(request)); + + assertThat(tb.getName()).isEqualTo("spring"); + assertThat(tb.getStringArray()).isNull(); + } + + @ParameterizedTest + @ValueSource(strings = { "stringArray*", "stringArray[]" }) + void shouldNotTriggerBindingWhenFieldIsDisallowedWithEmptyArrayIndex(String disallowedField) { + TestBean tb = new TestBean(); + + WebRequestDataBinder binder = new WebRequestDataBinder(tb); + binder.setDisallowedFields(disallowedField); + + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addParameter("name", "spring"); + request.addParameter(prefix + "stringArray[]", "ONE"); + request.addParameter(prefix + "stringArray[]", "TWO"); + binder.bind(new ServletWebRequest(request)); + + assertThat(tb.getName()).isEqualTo("spring"); + assertThat(tb.getStringArray()).isNull(); + } + @Test void shouldNotTriggerAutoGrowWhenFieldIsNotAllowed() { TestBean tb = new TestBean(); tb.setSomeMap(null); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); binder.setAllowedFields("name"); MockHttpServletRequest request = new MockHttpServletRequest(); @@ -361,13 +396,14 @@ class WebRequestDataBinderTests { assertThat(tb.getSomeMap()).isNull(); } - @Test - void shouldNotTriggerAutoGrowWhenFieldIsDisallowed() { + @ParameterizedTest + @ValueSource(strings = { "someMap*", "someMap[*]", "someMap[key1]" }) + void shouldNotTriggerAutoGrowWhenFieldIsDisallowed(String disallowedField) { TestBean tb = new TestBean(); tb.setSomeMap(null); - WebRequestDataBinder binder = new WebRequestDataBinder(tb, "person"); - binder.setDisallowedFields("someMap[key1]"); + WebRequestDataBinder binder = new WebRequestDataBinder(tb); + binder.setDisallowedFields(disallowedField); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("name", "spring");