Skip to content

Commit 89a90f1

Browse files
committed
Keep the - of header on init parameter names, otherwise the nested path will not work.
Signed-off-by: Mengqi Xu <2663479778@qq.com>
1 parent 57c0d95 commit 89a90f1

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinder.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ protected void addBindValues(MutablePropertyValues mpvs, ServletRequest request)
124124
String name = names.nextElement();
125125
Object value = getHeaderValue(httpRequest, name);
126126
if (value != null) {
127-
name = StringUtils.uncapitalize(name.replace("-", ""));
127+
name = transformedHeaderName(name);
128128
addValueIfNotPresent(mpvs, "Header", name, value);
129129
}
130130
}
@@ -147,6 +147,10 @@ private static void addValueIfNotPresent(MutablePropertyValues mpvs, String labe
147147
}
148148
}
149149

150+
private static String transformedHeaderName(String headerName) {
151+
return StringUtils.uncapitalize(headerName.replace("-", ""));
152+
}
153+
150154
private @Nullable Object getHeaderValue(HttpServletRequest request, String name) {
151155
if (!this.headerPredicate.test(name)) {
152156
return null;
@@ -206,7 +210,7 @@ protected Set<String> initParameterNames(ServletRequest request) {
206210
Enumeration<String> enumeration = httpServletRequest.getHeaderNames();
207211
while (enumeration.hasMoreElements()) {
208212
String headerName = enumeration.nextElement();
209-
set.add(headerName.replaceAll("-", ""));
213+
set.add(headerName);
210214
}
211215
}
212216
return set;

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ExtendedServletRequestDataBinderTests.java

+24
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,30 @@ void createBinderViaConstructor() {
8888
assertThat(bean.someIntArray()).containsExactly(1, 2);
8989
}
9090

91+
@Test
92+
void createBinderViaConstructorNested() {
93+
request.addHeader("Nested-Test-Bean.Some-Int-Array", "1");
94+
request.addHeader("Nested-Test-Bean.Some-Int-Array", "2");
95+
96+
ServletRequestDataBinder binder = new ExtendedServletRequestDataBinder(null);
97+
binder.setTargetType(ResolvableType.forClass(SimpleBean.class));
98+
binder.setNameResolver(new BindParamNameResolver());
99+
binder.construct(request);
100+
101+
SimpleBean bean = (SimpleBean) binder.getTarget();
102+
103+
assertThat(bean.nestedTestBean()).isNotNull();
104+
assertThat(bean.nestedTestBean().someIntArray()).containsExactly(1, 2);
105+
}
106+
107+
private record SimpleBean(@BindParam("Nested-Test-Bean") NestedTestBean nestedTestBean) {
108+
109+
}
110+
111+
private record NestedTestBean(@BindParam("Some-Int-Array") Integer[] someIntArray) {
112+
113+
}
114+
91115
@Test
92116
void uriVarsAndHeadersAddedConditionally() {
93117
request.addParameter("name", "John");

0 commit comments

Comments
 (0)