有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是服务器的绝对URI:

URI base = new URI("http://localhost/root?a=1");

这是一个相对URI:

URI rel = new URI("/child?b=5");

现在我尝试将相对1应用于绝对,并接收:

URI combined = base + rel; // somehow
assert combined.equals(new URI("http://localhost/root/child?a=1&b=5"));

是否可以使用JDK或某些库进行这样的操作


共 (3) 个答案

  1. # 1 楼答案

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

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

    大概

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

    需要一个if()来决定需要根据mergedUrl的外观加入它们

  2. # 2 楼答案

    URI(和文件)有一个接受现有URI(或文件)的构造函数
    它是为相对URI制作的:
    URL mergedURL = new URL(baseUrl, relativeUrl);
    要合并两个文件路径,可以使用:
    File mergedFile = new File(directoryFile, fileOrDir);
    如果使用mergedFile.getName(),如果文件名不是目录,则会得到该文件名
    这对于URL是不可能的

  3. # 3 楼答案

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

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

    要求第二个URL相对于第一个URL,其中第一个URL有一个查询字符串,这有点奇怪。第二个URL以“/”开头,这意味着它是相对于“/”的,而不是相对于“/根”。。。您确定生成的URL吗