diff --git a/src/main/java/org/springframework/hateoas/core/LinkBuilderSupport.java b/src/main/java/org/springframework/hateoas/core/LinkBuilderSupport.java index a2d1ac06..9a1c4e0f 100644 --- a/src/main/java/org/springframework/hateoas/core/LinkBuilderSupport.java +++ b/src/main/java/org/springframework/hateoas/core/LinkBuilderSupport.java @@ -86,6 +86,8 @@ public abstract class LinkBuilderSupport implements LinkB return getThis(); } + path = path.startsWith("/") ? path : "/".concat(path); + return slash(UriComponentsBuilder.fromUriString(path).build(), false); } diff --git a/src/test/java/org/springframework/hateoas/core/LinkBuilderSupportUnitTest.java b/src/test/java/org/springframework/hateoas/core/LinkBuilderSupportUnitTest.java index 869a7c9a..1511af1d 100644 --- a/src/test/java/org/springframework/hateoas/core/LinkBuilderSupportUnitTest.java +++ b/src/test/java/org/springframework/hateoas/core/LinkBuilderSupportUnitTest.java @@ -53,6 +53,19 @@ public class LinkBuilderSupportUnitTest extends TestUtils { assertThat(builder.toString(), endsWith("foo%20bar#foo")); } + /** + * @see #582 + */ + @Test + public void appendsPathContainingColonsCorrectly() { + + SampleLinkBuilder builder = new SampleLinkBuilder(UriComponentsBuilder.newInstance()); + + builder = builder.slash("47:11"); + + assertThat(builder.toString(), endsWith("47:11")); + } + static class SampleLinkBuilder extends LinkBuilderSupport { public SampleLinkBuilder(UriComponentsBuilder builder) { diff --git a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java index a6dc37c3..3cd2bb90 100644 --- a/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java +++ b/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java @@ -397,7 +397,7 @@ public class ControllerLinkBuilderUnitTest extends TestUtils { * @see #192 */ @Test - public void usesRootMappingOfTargetClassForMethodsOfParen() throws Exception { + public void usesRootMappingOfTargetClassForMethodsOfParent() throws Exception { Method method = ParentControllerWithoutRootMapping.class.getMethod("someEmptyMappedMethod");