From a33fe6fa0a0b58f97ff5dd7f9d9767ffdc202af1 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 --- .../web/util/UriComponentsBuilder.java | 16 ++++++++-------- .../web/util/UriComponentsBuilderTests.java | 11 +++++++++++ src/dist/changelog.txt | 1 + 3 files changed, 20 insertions(+), 8 deletions(-) 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 c95d620256..d309acb954 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 2d9323ca8d..3fefe43ebc 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 fdd01c8ef3..3a56a0576b 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) -------------------------------------