繁体   English   中英

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

[英]How to “merge” two URIs in 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或某些库进行这样的操作?

URL mergedURL = new URL(new URL(baseUrl), relativeUrl);

要将基本网址的参数传递给合并网址,您必须通过调用URL#getQuery手动提取它们并将它们附加到新网址

就像是,

String finalUrl = mergedUrl.toString() + "&" + baseUrl.getQuery();

根据mergedUrl的外观,需要if()来决定是否需要'&'来加入它们。

URI(和File也有)一个构造函数,它接受现有的URI(或File)。
它是相对URI的MADE:
URL mergedURL = new URL(baseUrl, relativeUrl);
要合并两个文件路径,您可以使用:
File mergedFile = new File(directoryFile, fileOrDir);
如果使用mergedFile.getName() ,则获取文件名(如果它不是目录)。
这不适用于URL。

丑陋,但至少在这种情况下有效:

URI combined = new URI( "http://" + base.getHost() + base.getPath() + rel.getPath() + "?" + base.getQuery() + "&" + rel.getQuery() );

要求使第二个URL相对于第一个URL,其中第一个URL具有查询字符串,这有点奇怪。 第二个URL以'/'开头,表示它相对于“/”,而不是“/ root”...你确定结果URL吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM