Skip to content

Commit fe76f40

Browse files
committed
RequestHeaderMapMethodArgumentResolver defensively checks for non-existing header values
Issue: SPR-14091 (cherry picked from commit 8f6ede5)
1 parent 9e3bb1e commit fe76f40

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

spring-web/src/main/java/org/springframework/web/method/annotation/RequestHeaderMapMethodArgumentResolver.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2012 the original author or authors.
2+
* Copyright 2002-2016 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -46,8 +46,8 @@
4646
public class RequestHeaderMapMethodArgumentResolver implements HandlerMethodArgumentResolver {
4747

4848
public boolean supportsParameter(MethodParameter parameter) {
49-
return parameter.hasParameterAnnotation(RequestHeader.class)
50-
&& Map.class.isAssignableFrom(parameter.getParameterType());
49+
return (parameter.hasParameterAnnotation(RequestHeader.class) &&
50+
Map.class.isAssignableFrom(parameter.getParameterType()));
5151
}
5252

5353
public Object resolveArgument(
@@ -56,7 +56,6 @@ public Object resolveArgument(
5656
throws Exception {
5757

5858
Class<?> paramType = parameter.getParameterType();
59-
6059
if (MultiValueMap.class.isAssignableFrom(paramType)) {
6160
MultiValueMap<String, String> result;
6261
if (HttpHeaders.class.isAssignableFrom(paramType)) {
@@ -67,8 +66,11 @@ public Object resolveArgument(
6766
}
6867
for (Iterator<String> iterator = webRequest.getHeaderNames(); iterator.hasNext();) {
6968
String headerName = iterator.next();
70-
for (String headerValue : webRequest.getHeaderValues(headerName)) {
71-
result.add(headerName, headerValue);
69+
String[] headerValues = webRequest.getHeaderValues(headerName);
70+
if (headerValues != null) {
71+
for (String headerValue : headerValues) {
72+
result.add(headerName, headerValue);
73+
}
7274
}
7375
}
7476
return result;
@@ -78,9 +80,12 @@ public Object resolveArgument(
7880
for (Iterator<String> iterator = webRequest.getHeaderNames(); iterator.hasNext();) {
7981
String headerName = iterator.next();
8082
String headerValue = webRequest.getHeader(headerName);
81-
result.put(headerName, headerValue);
83+
if (headerValue != null) {
84+
result.put(headerName, headerValue);
85+
}
8286
}
8387
return result;
8488
}
8589
}
90+
8691
}

0 commit comments

Comments
 (0)