如何在Java中“合并”两个URI?

时间:2011-11-25 18:29:42

标签: java

这是服务器的绝对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或某些库进行此类操作?

3 个答案:

答案 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吗?