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 32f0172fda..e2251a3ece 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 @@ -716,35 +716,18 @@ public class UriComponentsBuilder implements Cloneable { } public void addPath(String path) { - if (!StringUtils.hasText(path)) { - return; + if (StringUtils.hasText(path)) { + PathSegmentComponentBuilder psBuilder = getLastBuilder(PathSegmentComponentBuilder.class); + FullPathComponentBuilder fpBuilder = getLastBuilder(FullPathComponentBuilder.class); + if (psBuilder != null) { + path = path.startsWith("/") ? path : "/" + path; + } + if (fpBuilder == null) { + fpBuilder = new FullPathComponentBuilder(); + this.builders.add(fpBuilder); + } + fpBuilder.append(path); } - int startIndex = path.indexOf("{/"); - while (startIndex != -1) { - String pathToAdd = path.substring(0, startIndex); - addPathInternal(pathToAdd); - - int endIndex = path.indexOf("}", startIndex); - String pathSegmentToAdd = "{" + path.substring(startIndex + 2, endIndex) + "}"; - addPathSegments(pathSegmentToAdd); - - path = (endIndex >= path.length()) ? "" : path.substring(endIndex + 1); - startIndex = path.indexOf("{/"); - } - addPathInternal(path); - } - - private void addPathInternal(String path) { - PathSegmentComponentBuilder psBuilder = getLastBuilder(PathSegmentComponentBuilder.class); - FullPathComponentBuilder fpBuilder = getLastBuilder(FullPathComponentBuilder.class); - if (psBuilder != null) { - path = path.startsWith("/") ? path : "/" + path; - } - if (fpBuilder == null) { - fpBuilder = new FullPathComponentBuilder(); - this.builders.add(fpBuilder); - } - fpBuilder.append(path); } @SuppressWarnings("unchecked") 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 917f147eb6..b5ee2eba69 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 @@ -195,16 +195,6 @@ public class UriComponentsBuilderTests { assertEquals("1USD=?EUR", result.getQueryParams().getFirst("q")); } - //SPR-12750 - - @Test - public void fromUriStringWithVariablesRfc6570() { - String url = "http://example.com/part1/{/part2}/{var1}/url/{/urlvar}/"; - UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url); - UriComponents uriComponents = builder.build().expand("part/2", "var/1", "url/var").encode(); - assertEquals("/part1/part%2F2/var/1/url/url%2Fvar/", uriComponents.getPath()); - } - // SPR-10779 @Test diff --git a/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java b/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java index 5a98e6c37b..ebd3cea217 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -98,19 +98,6 @@ public class UriTemplateTests { template.expand(uriVariables); } - //SPR-12750 - - @Test - public void expandMapForRFC6570() throws Exception { - Map uriVariables = new HashMap(2); - uriVariables.put("hotel", "1"); - uriVariables.put("publicpath", "pics/logo.png"); - uriVariables.put("scale", "150x150"); - UriTemplate template = new UriTemplate("/hotels/{hotel}/pic/{/publicpath}/size/{scale}"); - URI result = template.expand(uriVariables); - assertEquals("Invalid expanded template", new URI("/hotels/1/pic/pics%2Flogo.png/size/150x150"), result); - } - @Test public void expandEncoded() throws Exception { UriTemplate template = new UriTemplate("http://example.com/hotel list/{hotel}");