URI template needs to match with variable value that is a set of folders

微笑、不失礼 提交于 2020-07-06 18:43:15

问题


I am using org.springframework.web.util.UriTemplate and I am trying to match this uri template:

http://{varName1}/path1/path2/{varName2}/{varName3}/{varName4}

with the following uri:

http://hostname/path1/path2/design/99999/product/schema/75016TC806AA/TC806AA.tar

Currently I get the following uri variables:

{varName1=hostname, varName2=design/99999/product/schema, varName3=75016TC806AA,varName4=TC806AA.tar}

But I would like to get the following uri variables:

{varName1=hostname, varName2=design varName3=99999, varName4=product/schema/75016TC806AA/TC806AA.tar}

I tried to use wildcards as * or + in my template, but that doesn't seems to work:

http://{varName1}/path1/path2/{varName2}/{varName3}/{varName4*}

http://{varName1}/path1/path2/{varName2}/{varName3}/{+varName4}

Edited

String url = http://localhost/path1/path2/folder1/folder2/folder3/folder4/folder5
UriTemplate uriTemplate = new UriTemplate(urlTemplateToMatch);
Map<String, String> uriVariables = uriTemplate.match(url);

String urlTemplateToMatch1 = http://{varName1}/path1/path2/{varName2}/{varName3}/{varName4}
uriVariables1 = {varName1=localhost, varName2=folder1/folder2/folder3, varName3=folder4, varName4=folder5}

String urlTemplateToMatch2 = http://{varName1}/test1/test2/{varName2:.*?}/{varName3:.*?}/{varName4}
uriVariables2 = {varName1=localhost, varName2:.*?=folder1/folder2/folder3, varName3:.*?=folder4, varName4=folder5}

String urlTemplateToMatch3 = http://{varName1}/test1/test2/{varName2:\\w*}/{varName3:.\\w*}/{varName4}
uriVariables3 = {varName1=localhost, varName2:\w*=folder1/folder2/folder3, varName3:\w*=folder4, varName4=folder5}

回答1:


Try with:

http://{varName1}/path1/path2/{varName2:.*?}/{varName3:.*?}/{varName4}

or may be

http://{varName1}/path1/path2/{varName2:\\w*}/{varName3:\\w*}/{varName4}

Edit

@RunWith(BlockJUnit4ClassRunner.class)
public class UriTemplateTest {

    private String URI = "http://hostname/path1/path2/design/99999/product/schema/75016TC806AA/TC806AA.tar";
    private String TEMPLATE_WORD = "http://{varName1}/path1/path2/{varName2:\\w*}/{varName3:\\w*}/{varName4}";
    private String TEMPLATE_RELUCTANT = "http://{varName1}/path1/path2/{varName2:.*?}/{varName3:.*?}/{varName4}";
    private Map<String, String> expected;

    @Before
    public void init() {
        expected = new HashMap<String, String>();
        expected.put("varName1", "hostname");
        expected.put("varName2", "design");
        expected.put("varName3", "99999");
        expected.put("varName4", "product/schema/75016TC806AA/TC806AA.tar");
    }

    @Test
    public void testTemplateWord() {
        testTemplate(TEMPLATE_WORD);
    }

    @Test 
    public void testTemplateReluctant() {
        testTemplate(TEMPLATE_RELUCTANT);
    }


    private void testTemplate(String template) {
        UriTemplate ut = new UriTemplate(template);
        Map<String, String> map = ut.match(URI);
        Assert.assertEquals(expected, map);
    }
}


来源:https://stackoverflow.com/questions/16671292/uri-template-needs-to-match-with-variable-value-that-is-a-set-of-folders

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!