From e8deba291574b3c8dcabcb00b7141a51ce9f16b6 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 1 May 2012 16:10:38 -0400 Subject: [PATCH] Fix issue with encoded params in UriComponentsBuilder The fromUri method of UriComponentsBuilder used uri.getXxx() methods, which decode the URI parts causing URI parsing issues. The same method now uses uri.getRawXxx(). Issue: SPR-9317 Backport-Issue: SPR-9549 Backport-Commit: a33fe6fa0a0b58f97ff5dd7f9d9767ffdc202af1 --- build-spring-framework/resources/changelog.txt | 2 +- .../web/util/UriComponentsBuilder.java | 16 ++++++++-------- .../web/util/UriComponentsBuilderTests.java | 11 +++++++++++ 3 files changed, 20 insertions(+), 9 deletions(-) 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();