16
16
17
17
package org .springframework .web .servlet .mvc .method .annotation ;
18
18
19
+ import java .util .ArrayList ;
20
+ import java .util .Enumeration ;
21
+ import java .util .List ;
19
22
import java .util .Map ;
20
23
import java .util .Set ;
21
24
22
25
import jakarta .servlet .ServletRequest ;
26
+ import jakarta .servlet .http .HttpServletRequest ;
23
27
24
28
import org .springframework .beans .MutablePropertyValues ;
25
29
import org .springframework .lang .Nullable ;
@@ -83,6 +87,17 @@ protected void addBindValues(MutablePropertyValues mpvs, ServletRequest request)
83
87
if (uriVars != null ) {
84
88
uriVars .forEach ((name , value ) -> addValueIfNotPresent (mpvs , "URI variable" , name , value ));
85
89
}
90
+ if (request instanceof HttpServletRequest httpRequest ) {
91
+ Enumeration <String > names = httpRequest .getHeaderNames ();
92
+ while (names .hasMoreElements ()) {
93
+ String name = names .nextElement ();
94
+ Object value = getHeaderValue (httpRequest , name );
95
+ if (value != null ) {
96
+ name = name .replace ("-" , "" );
97
+ addValueIfNotPresent (mpvs , "Header" , name , value );
98
+ }
99
+ }
100
+ }
86
101
}
87
102
88
103
@ SuppressWarnings ("unchecked" )
@@ -91,19 +106,35 @@ private static Map<String, String> getUriVars(ServletRequest request) {
91
106
return (Map <String , String >) request .getAttribute (HandlerMapping .URI_TEMPLATE_VARIABLES_ATTRIBUTE );
92
107
}
93
108
94
- private static void addValueIfNotPresent (
95
- MutablePropertyValues mpvs , String label , String name , @ Nullable Object value ) {
96
-
97
- if (value != null ) {
98
- if (mpvs .contains (name )) {
99
- if (logger .isDebugEnabled ()) {
100
- logger .debug (label + " '" + name + "' overridden by request bind value." );
101
- }
102
- }
103
- else {
104
- mpvs .addPropertyValue (name , value );
109
+ private static void addValueIfNotPresent (MutablePropertyValues mpvs , String label , String name , Object value ) {
110
+ if (mpvs .contains (name )) {
111
+ if (logger .isDebugEnabled ()) {
112
+ logger .debug (label + " '" + name + "' overridden by request bind value." );
105
113
}
106
114
}
115
+ else {
116
+ mpvs .addPropertyValue (name , value );
117
+ }
118
+ }
119
+
120
+ @ Nullable
121
+ private static Object getHeaderValue (HttpServletRequest request , String name ) {
122
+ Enumeration <String > valuesEnum = request .getHeaders (name );
123
+ if (!valuesEnum .hasMoreElements ()) {
124
+ return null ;
125
+ }
126
+
127
+ String value = valuesEnum .nextElement ();
128
+ if (!valuesEnum .hasMoreElements ()) {
129
+ return value ;
130
+ }
131
+
132
+ List <Object > values = new ArrayList <>();
133
+ values .add (value );
134
+ while (valuesEnum .hasMoreElements ()) {
135
+ values .add (valuesEnum .nextElement ());
136
+ }
137
+ return values ;
107
138
}
108
139
109
140
0 commit comments