Browse Source

Polish

pull/1423/merge
Rossen Stoyanchev 9 years ago
parent
commit
48a5938cd4
  1. 12
      spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java
  2. 8
      spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java

12
spring-webmvc/src/main/java/org/springframework/web/servlet/support/AbstractFlashMapManager.java

@ -33,7 +33,6 @@ import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.servlet.FlashMap; import org.springframework.web.servlet.FlashMap;
import org.springframework.web.servlet.FlashMapManager; import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UrlPathHelper; import org.springframework.web.util.UrlPathHelper;
@ -167,15 +166,13 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
*/ */
protected boolean isFlashMapForRequest(FlashMap flashMap, HttpServletRequest request) { protected boolean isFlashMapForRequest(FlashMap flashMap, HttpServletRequest request) {
String expectedPath = flashMap.getTargetRequestPath(); String expectedPath = flashMap.getTargetRequestPath();
String requestUri = getUrlPathHelper().getOriginatingRequestUri(request);
if (expectedPath != null) { if (expectedPath != null) {
String requestUri = getUrlPathHelper().getOriginatingRequestUri(request);
if (!requestUri.equals(expectedPath) && !requestUri.equals(expectedPath + "/")) { if (!requestUri.equals(expectedPath) && !requestUri.equals(expectedPath + "/")) {
return false; return false;
} }
} }
String queryString = getUrlPathHelper().getOriginatingQueryString(request); MultiValueMap<String, String> actualParams = getOriginatingRequestParams(request);
UriComponents uriComponents = ServletUriComponentsBuilder.fromUriString(requestUri).query(queryString).build();
MultiValueMap<String, String> actualParams = uriComponents.getQueryParams();
MultiValueMap<String, String> expectedParams = flashMap.getTargetRequestParams(); MultiValueMap<String, String> expectedParams = flashMap.getTargetRequestParams();
for (String expectedName : expectedParams.keySet()) { for (String expectedName : expectedParams.keySet()) {
List<String> actualValues = actualParams.get(expectedName); List<String> actualValues = actualParams.get(expectedName);
@ -191,6 +188,11 @@ public abstract class AbstractFlashMapManager implements FlashMapManager {
return true; return true;
} }
private MultiValueMap<String, String> getOriginatingRequestParams(HttpServletRequest request) {
String query = getUrlPathHelper().getOriginatingQueryString(request);
return ServletUriComponentsBuilder.fromPath("/").query(query).build().getQueryParams();
}
@Override @Override
public final void saveOutputFlashMap(FlashMap flashMap, HttpServletRequest request, HttpServletResponse response) { public final void saveOutputFlashMap(FlashMap flashMap, HttpServletRequest request, HttpServletResponse response) {
if (CollectionUtils.isEmpty(flashMap)) { if (CollectionUtils.isEmpty(flashMap)) {

8
spring-webmvc/src/test/java/org/springframework/web/servlet/support/FlashMapManagerTests.java

@ -21,6 +21,7 @@ import static org.junit.Assert.*;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -318,16 +319,14 @@ public class FlashMapManagerTests {
assertEquals("value", flashMap.get("key")); assertEquals("value", flashMap.get("key"));
} }
// SPR-15505 @Test // SPR-15505
@Test
public void retrieveAndUpdateMatchByOriginatingPathAndQueryString() { public void retrieveAndUpdateMatchByOriginatingPathAndQueryString() {
FlashMap flashMap = new FlashMap(); FlashMap flashMap = new FlashMap();
flashMap.put("key", "value"); flashMap.put("key", "value");
flashMap.setTargetRequestPath("/accounts"); flashMap.setTargetRequestPath("/accounts");
flashMap.addTargetRequestParam("a", "b"); flashMap.addTargetRequestParam("a", "b");
this.flashMapManager.setFlashMaps(Arrays.asList(flashMap)); this.flashMapManager.setFlashMaps(Collections.singletonList(flashMap));
this.request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/accounts"); this.request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/accounts");
this.request.setAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, "a=b"); this.request.setAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, "a=b");
@ -339,6 +338,7 @@ public class FlashMapManagerTests {
assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size()); assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size());
} }
private static class TestFlashMapManager extends AbstractFlashMapManager { private static class TestFlashMapManager extends AbstractFlashMapManager {
private List<FlashMap> flashMaps; private List<FlashMap> flashMaps;

Loading…
Cancel
Save