18
18
19
19
import static org .junit .Assert .*;
20
20
21
+ import java .net .URLEncoder ;
21
22
import java .util .ArrayList ;
22
23
import java .util .Arrays ;
23
24
import java .util .List ;
31
32
32
33
import org .springframework .mock .web .test .MockHttpServletRequest ;
33
34
import org .springframework .mock .web .test .MockHttpServletResponse ;
34
- import org .springframework .util .MultiValueMap ;
35
35
import org .springframework .web .servlet .FlashMap ;
36
36
import org .springframework .web .util .WebUtils ;
37
37
@@ -113,19 +113,19 @@ public void retrieveAndUpdateMatchByParams() {
113
113
114
114
this .flashMapManager .setFlashMaps (Arrays .asList (flashMap ));
115
115
116
- this .request .setParameter ("number" , ( String ) null );
116
+ this .request .setQueryString ("number=" );
117
117
FlashMap inputFlashMap = this .flashMapManager .retrieveAndUpdate (this .request , this .response );
118
118
119
119
assertNull (inputFlashMap );
120
120
assertEquals ("FlashMap should not have been removed" , 1 , this .flashMapManager .getFlashMaps ().size ());
121
121
122
- this .request .setParameter ("number" , " two" );
122
+ this .request .setQueryString ("number= two" );
123
123
inputFlashMap = this .flashMapManager .retrieveAndUpdate (this .request , this .response );
124
124
125
125
assertNull (inputFlashMap );
126
126
assertEquals ("FlashMap should not have been removed" , 1 , this .flashMapManager .getFlashMaps ().size ());
127
127
128
- this .request .setParameter ("number" , " one" );
128
+ this .request .setQueryString ("number= one" );
129
129
inputFlashMap = this .flashMapManager .retrieveAndUpdate (this .request , this .response );
130
130
131
131
assertEquals (flashMap , inputFlashMap );
@@ -143,13 +143,13 @@ public void retrieveAndUpdateMatchWithMultiValueParam() {
143
143
144
144
this .flashMapManager .setFlashMaps (Arrays .asList (flashMap ));
145
145
146
- this .request .setParameter ("id" , " 1" );
146
+ this .request .setQueryString ("id= 1" );
147
147
FlashMap inputFlashMap = this .flashMapManager .retrieveAndUpdate (this .request , this .response );
148
148
149
149
assertNull (inputFlashMap );
150
150
assertEquals ("FlashMap should not have been removed" , 1 , this .flashMapManager .getFlashMaps ().size ());
151
151
152
- this .request .addParameter ("id" , " 2" );
152
+ this .request .setQueryString ("id=1&id= 2" );
153
153
inputFlashMap = this .flashMapManager .retrieveAndUpdate (this .request , this .response );
154
154
155
155
assertEquals (flashMap , inputFlashMap );
@@ -268,20 +268,54 @@ public void saveOutputFlashMapNormalizeTargetPath() throws InterruptedException
268
268
269
269
@ Test
270
270
public void saveOutputFlashMapDecodeParameters () throws Exception {
271
+
272
+ FlashMap flashMap = new FlashMap ();
273
+ flashMap .put ("key" , "value" );
274
+ flashMap .setTargetRequestPath ("/path" );
275
+ flashMap .addTargetRequestParam ("param" , "%D0%90%D0%90" );
276
+ flashMap .addTargetRequestParam ("param" , "%D0%91%D0%91" );
277
+ flashMap .addTargetRequestParam ("param" , "%D0%92%D0%92" );
278
+ flashMap .addTargetRequestParam ("%3A%2F%3F%23%5B%5D%40" , "value" );
279
+
271
280
this .request .setCharacterEncoding ("UTF-8" );
281
+ this .flashMapManager .saveOutputFlashMap (flashMap , this .request , this .response );
282
+
283
+ MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest ("GET" , "/path" );
284
+ requestAfterRedirect .setQueryString ("param=%D0%90%D0%90¶m=%D0%91%D0%91¶m=%D0%92%D0%92&%3A%2F%3F%23%5B%5D%40=value" );
285
+ requestAfterRedirect .addParameter ("param" , "\u0410 \u0410 " );
286
+ requestAfterRedirect .addParameter ("param" , "\u0411 \u0411 " );
287
+ requestAfterRedirect .addParameter ("param" , "\u0412 \u0412 " );
288
+ requestAfterRedirect .addParameter (":/?#[]@" , "value" );
289
+
290
+ flashMap = this .flashMapManager .retrieveAndUpdate (requestAfterRedirect , new MockHttpServletResponse ());
291
+ assertNotNull (flashMap );
292
+ assertEquals (1 , flashMap .size ());
293
+ assertEquals ("value" , flashMap .get ("key" ));
294
+ }
295
+
296
+ // SPR-12569
297
+
298
+ @ Test
299
+ public void flashAttributesWithQueryParamsWithSpace () throws Exception {
300
+
301
+ String encodedValue = URLEncoder .encode ("1 2" , "UTF-8" );
272
302
273
303
FlashMap flashMap = new FlashMap ();
274
- flashMap .put ("anyKey" , "anyValue" );
304
+ flashMap .put ("key" , "value" );
305
+ flashMap .setTargetRequestPath ("/path" );
306
+ flashMap .addTargetRequestParam ("param" , encodedValue );
275
307
276
- flashMap .addTargetRequestParam ("key" , "%D0%90%D0%90" );
277
- flashMap .addTargetRequestParam ("key" , "%D0%91%D0%91" );
278
- flashMap .addTargetRequestParam ("key" , "%D0%92%D0%92" );
279
- flashMap .addTargetRequestParam ("%3A%2F%3F%23%5B%5D%40" , "value" );
308
+ this .request .setCharacterEncoding ("UTF-8" );
280
309
this .flashMapManager .saveOutputFlashMap (flashMap , this .request , this .response );
281
310
282
- MultiValueMap <String ,String > targetRequestParams = flashMap .getTargetRequestParams ();
283
- assertEquals (Arrays .asList ("\u0410 \u0410 " , "\u0411 \u0411 " , "\u0412 \u0412 " ), targetRequestParams .get ("key" ));
284
- assertEquals (Arrays .asList ("value" ), targetRequestParams .get (":/?#[]@" ));
311
+ MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest ("GET" , "/path" );
312
+ requestAfterRedirect .setQueryString ("param=" + encodedValue );
313
+ requestAfterRedirect .addParameter ("param" , "1 2" );
314
+
315
+ flashMap = this .flashMapManager .retrieveAndUpdate (requestAfterRedirect , new MockHttpServletResponse ());
316
+ assertNotNull (flashMap );
317
+ assertEquals (1 , flashMap .size ());
318
+ assertEquals ("value" , flashMap .get ("key" ));
285
319
}
286
320
287
321
0 commit comments