diff --git a/src/main/java/org/springframework/hateoas/UriTemplate.java b/src/main/java/org/springframework/hateoas/UriTemplate.java index 21cc7f03..8b3248c5 100644 --- a/src/main/java/org/springframework/hateoas/UriTemplate.java +++ b/src/main/java/org/springframework/hateoas/UriTemplate.java @@ -51,7 +51,7 @@ import org.springframework.web.util.UriUtils; */ public class UriTemplate implements Iterable, Serializable { - private static final Pattern VARIABLE_REGEX = Pattern.compile("\\{([\\?\\&#/]?)([\\w\\,*]+)\\}"); + private static final Pattern VARIABLE_REGEX = Pattern.compile("\\{([\\?\\&#/]?)([\\w%\\,*]+)\\}"); private static final long serialVersionUID = -1007874653930162262L; private final TemplateVariables variables; diff --git a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java index ab23eae4..0b60e568 100755 --- a/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java +++ b/src/test/java/org/springframework/hateoas/UriTemplateUnitTest.java @@ -39,7 +39,7 @@ import org.apache.commons.io.output.ByteArrayOutputStream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.hateoas.TemplateVariable.VariableType; +import org.springframework.hateoas.TemplateVariable.*; /** * Unit tests for {@link UriTemplate}. @@ -348,6 +348,20 @@ class UriTemplateUnitTest { assertThat(UriTemplate.isTemplate("http://localhost/api/rest/v1/userGroups/50/functions/{?id*}")).isTrue(); } + @Test // #475 + void variablesWithPercentEncodingShouldWork() { + + assertThat(UriTemplate.of("http://localhost/foo/bar/{%24filter}").expand("value")) + .isEqualTo(URI.create("http://localhost/foo/bar/value")); + } + + @Test // #475 + void variablesWithUnderscoresShouldWork() { + + assertThat(UriTemplate.of("http://localhost/foo/bar/{_filter}").expand("value")) + .isEqualTo(URI.create("http://localhost/foo/bar/value")); + } + private static void assertVariables(UriTemplate template, TemplateVariable... variables) { assertVariables(template, Arrays.asList(variables)); }