这是服务器的绝对URI:
URI base = new URI("http://localhost/root?a=1");
这是一个相对URI:
URI rel = new URI("/child?b=5");
现在我试图将相对的一个应用于绝对并接收:
URI combined = base + rel; // somehow
assert combined.equals(new URI("http://localhost/root/child?a=1&b=5"));
是否可以使用JDK或某些库进行此类操作?
答案 0 :(得分:18)
URL mergedURL = new URL(new URL(baseUrl), relativeUrl);
要将基本网址的参数传递给合并网址,您必须通过调用URL#getQuery手动提取它们并将它们附加到新网址
类似的东西,
String finalUrl = mergedUrl.toString() + "&" + baseUrl.getQuery();
if()决定是否'&'需要加入它们,具体取决于mergedUrl的样子。
答案 1 :(得分:2)
URI(和文件也)有一个接受现有URI(或文件)的构造函数
它是相对URI的MADE:
URL mergedURL = new URL(baseUrl, relativeUrl);
要合并两个文件路径,您可以使用:
File mergedFile = new File(directoryFile, fileOrDir);
如果使用mergedFile.getName()
,如果文件名不是目录,则会获得文件名
这不适用于URL。
答案 2 :(得分:0)
丑陋,但至少在这种情况下有效:
URI combined = new URI( "http://" + base.getHost() + base.getPath() + rel.getPath() + "?" + base.getQuery() + "&" + rel.getQuery() );
要求使第二个URL相对于第一个URL,其中第一个URL具有查询字符串,这有点奇怪。第二个URL以'/'开头,表示它相对于“/”,而不是“/ root”...你确定结果URL吗?