Browse Source

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: a33fe6fa0a
3.1.x
Rossen Stoyanchev 14 years ago
parent
commit
e8deba2915
  1. 2
      build-spring-framework/resources/changelog.txt
  2. 16
      org.springframework.web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java
  3. 11
      org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

2
build-spring-framework/resources/changelog.txt

@ -26,7 +26,7 @@ Changes in version 3.1.2 (2012-06-??) @@ -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)
-------------------------------------

16
org.springframework.web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java

@ -260,8 +260,8 @@ public class UriComponentsBuilder { @@ -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 { @@ -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;
}

11
org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

@ -76,6 +76,17 @@ public class UriComponentsBuilderTests { @@ -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();

Loading…
Cancel
Save