Support path segment URI var expansion in UrlTag
Before this change UrlTag expanded URI vars and encoded them using
UriUtils.encodePath.
This change makes it possible to expand using
UriUtils.encodePathSegment, which means a "/" is encoded as "%2F".
To expand with path segment semantics, prefix the URI var name "/":
<spring:url value="/url/path/{/var}">
<spring:param name="var" value="my/Id" />
</spring:url>
Issue: SPR-11401
This commit is contained in:
@@ -431,6 +431,42 @@ public class UrlTagTests extends AbstractTagTests {
|
||||
assertTrue(usedParams.contains("name"));
|
||||
}
|
||||
|
||||
// SPR-11401
|
||||
|
||||
public void testReplaceUriTemplateParamsTemplateWithPathSegment()
|
||||
throws JspException {
|
||||
List<Param> params = new LinkedList<Param>();
|
||||
Set<String> usedParams = new HashSet<String>();
|
||||
|
||||
Param param = new Param();
|
||||
param.setName("name");
|
||||
param.setValue("my/Id");
|
||||
params.add(param);
|
||||
|
||||
String uri = tag.replaceUriTemplateParams("url/{/name}", params, usedParams);
|
||||
|
||||
assertEquals("url/my%2FId", uri);
|
||||
assertEquals(1, usedParams.size());
|
||||
assertTrue(usedParams.contains("name"));
|
||||
}
|
||||
|
||||
public void testReplaceUriTemplateParamsTemplateWithPath()
|
||||
throws JspException {
|
||||
List<Param> params = new LinkedList<Param>();
|
||||
Set<String> usedParams = new HashSet<String>();
|
||||
|
||||
Param param = new Param();
|
||||
param.setName("name");
|
||||
param.setValue("my/Id");
|
||||
params.add(param);
|
||||
|
||||
String uri = tag.replaceUriTemplateParams("url/{name}", params, usedParams);
|
||||
|
||||
assertEquals("url/my/Id", uri);
|
||||
assertEquals(1, usedParams.size());
|
||||
assertTrue(usedParams.contains("name"));
|
||||
}
|
||||
|
||||
public void testCreateUrlRemoteServer() throws JspException {
|
||||
tag.setValue("http://www.springframework.org/");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user