我试图找到关于如何解析 Spring MVC 中的 URI 模板的明确答案。文档链接到 RFC 草案,但 Spring 没有在RFC 的实现页面中列出 另一方面,这个页面似乎建议他们使用 SpEL。任何人都有一个可以为我清除这个的链接?
问问题
585 次
2 回答
1
解析 URI 模板涉及两个类。
AntPathMatcher.extractUriTemplateVariables()
: 在@RequestMapping
MVC 注解中使用UriTemplate
: 用于 RestTemplate 客户端。
您可以使用这些类来测试如何解析 URI 模板。
例如对于 MVC 请求映射:
@RunWith(BlockJUnit4ClassRunner.class)
public class UriTemplateTest {
private AntPathMatcher matcher = new AntPathMatcher();
private Log log = LogFactory.getLog(UriTemplateTest.class);
@Test
public void testUriTemplate() {
Map<String, String> variables = matcher.extractUriTemplateVariables("/booking/hotel/{id}", "/booking/hotel/43");
log.info(variables);
}
}
于 2013-10-18T09:48:50.353 回答
1
Spring 不支持 RFC6570,
例如第一次通过,第二次失败。
@Test
public void thatUriPathVariablesWithSlashGetEncoded() {
String uri = com.damnhandy.uri.template.UriTemplate.fromTemplate("http://localhost:80/context/entity/{var1}/{var2}").set("var1", "my/Id").set("var2", "blah").expand();
Assert.assertThat(uri, Matchers.is("http://localhost:80/context/entity/my%2FId/blah"));
}
@Test
public void thatUriPathVariablesWithSlashGetEncodedWithSpring() {
String uri = new org.springframework.web.util.UriTemplate("http://localhost:80/context/entity/{var1}/{var2}").expand("my/Id", "blah")
.toASCIIString();
Assert.assertThat(uri, Matchers.is("http://localhost:80/context/entity/my%2FId/blah"));
}
有一张票可以在某一天添加支持。https://jira.spring.io/browse/SPR-10505
于 2015-04-21T00:50:27.290 回答