diff --git a/build-spring-framework/resources/changelog.txt b/build-spring-framework/resources/changelog.txt index 8e465986705..4baa17aa10b 100644 --- a/build-spring-framework/resources/changelog.txt +++ b/build-spring-framework/resources/changelog.txt @@ -26,7 +26,7 @@ Changes in version 3.1.2 (2012-06-??) * fix issue with suffix pattern in AnnotationMethodHandlerAdapter * merge rather than add URI vars in ExtendedServletRequestDataBinder * raise RestClientException for unknown HTTP status codes - +* fix issue with encoded params in UriComponentsBuilder Changes in version 3.1.1 (2012-02-16) ------------------------------------- diff --git a/org.springframework.web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/org.springframework.web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index c95d620256e..d309acb9546 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/org.springframework.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/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java index 2d9323ca8d6..3fefe43ebc7 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java +++ b/org.springframework.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();