[英]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.