diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index c95d620256e..d309acb9546 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -260,8 +260,8 @@ public class UriComponentsBuilder { this.scheme = uri.getScheme(); - if (uri.getUserInfo() != null) { - this.userInfo = uri.getUserInfo(); + if (uri.getRawUserInfo() != null) { + this.userInfo = uri.getRawUserInfo(); } if (uri.getHost() != null) { this.host = uri.getHost(); @@ -269,15 +269,15 @@ public class UriComponentsBuilder { if (uri.getPort() != -1) { this.port = uri.getPort(); } - if (StringUtils.hasLength(uri.getPath())) { - this.pathBuilder = new FullPathComponentBuilder(uri.getPath()); + if (StringUtils.hasLength(uri.getRawPath())) { + this.pathBuilder = new FullPathComponentBuilder(uri.getRawPath()); } - if (StringUtils.hasLength(uri.getQuery())) { + if (StringUtils.hasLength(uri.getRawQuery())) { this.queryParams.clear(); - query(uri.getQuery()); + query(uri.getRawQuery()); } - if (uri.getFragment() != null) { - this.fragment = uri.getFragment(); + if (uri.getRawFragment() != null) { + this.fragment = uri.getRawFragment(); } return this; } diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java index 2d9323ca8d6..3fefe43ebc7 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java @@ -76,6 +76,17 @@ public class UriComponentsBuilderTests { assertEquals("Invalid result URI", uri, result.toUri()); } + // SPR-9317 + + @Test + public void fromUriEncodedQuery() throws URISyntaxException { + URI uri = new URI("http://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D"); + String fromUri = UriComponentsBuilder.fromUri(uri).build().getQueryParams().get("param").get(0); + String fromUriString = UriComponentsBuilder.fromUriString(uri.toString()).build().getQueryParams().get("param").get(0); + + assertEquals(fromUri, fromUriString); + } + @Test public void fromUriString() { UriComponents result = UriComponentsBuilder.fromUriString("http://www.ietf.org/rfc/rfc3986.txt").build(); diff --git a/src/dist/changelog.txt b/src/dist/changelog.txt index fdd01c8ef36..3a56a0576b2 100644 --- a/src/dist/changelog.txt +++ b/src/dist/changelog.txt @@ -12,6 +12,7 @@ Changes in version 3.2 M1 * fix concurrency issue in AnnotationMethodHandlerExceptionResolver * fix case-sensitivity issue with some containers on access to 'Content-Disposition' header * add Servlet 3.0 based async support +* fix issue with encoded params in UriComponentsBuilder Changes in version 3.1.1 (2012-02-16) -------------------------------------