3

我试图找到关于如何解析 Spring MVC 中的 URI 模板的明确答案。文档链接到 RFC 草案,但 Spring 没有在RFC 的实现页面中列出 另一方面,这个页面似乎建议他们使用 SpEL。任何人都有一个可以为我清除这个的链接?

4

2 回答 2

1

解析 URI 模板涉及两个类。

  • AntPathMatcher.extractUriTemplateVariables(): 在@RequestMappingMVC 注解中使用
  • 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 回答