当前位置: 首页 > 面试题库 >

如何将查询参数附加到现有URL?

邹宏峻
2023-03-14
问题内容

我想将键值对作为查询参数附加到现有URL。虽然我可以通过检查URL是否存在查询部分还是片段部分并通过跳过一堆if子句来执行追加来做到这一点,但是我想知道是否有通过Apache进行清理的干净方法公共图书馆或类似的东西。

http://example.com 将是 http://example.com?name=John

http://example.com#fragment 将是 http://example.com?name=John#fragment

http://example.com?email=john.doe@email.com 将是
http://example.com?email=john.doe@email.com&name=John

http://example.com?email=john.doe@email.com#fragment 将是
http://example.com?email=john.doe@email.com&name=John#fragment

我之前已经运行过多次这种情况,并且我希望做到这一点而不会以任何方式破坏URL。


问题答案:

这可以通过使用java.net.URI类使用现有实例中的部分构造一个新实例来完成,这应确保它符合URI语法。

查询部分将为null或现有字符串,因此您可以决定用&附加另一个参数或开始新的查询。

public class StackOverflow26177749 {

    public static URI appendUri(String uri, String appendQuery) throws URISyntaxException {
        URI oldUri = new URI(uri);

        String newQuery = oldUri.getQuery();
        if (newQuery == null) {
            newQuery = appendQuery;
        } else {
            newQuery += "&" + appendQuery;  
        }

        return new URI(oldUri.getScheme(), oldUri.getAuthority(),
                oldUri.getPath(), newQuery, oldUri.getFragment());
    }

    public static void main(String[] args) throws Exception {
        System.out.println(appendUri("http://example.com", "name=John"));
        System.out.println(appendUri("http://example.com#fragment", "name=John"));
        System.out.println(appendUri("http://example.com?email=john.doe@email.com", "name=John"));
        System.out.println(appendUri("http://example.com?email=john.doe@email.com#fragment", "name=John"));
    }
}

更短的选择

public static URI appendUri(String uri, String appendQuery) throws URISyntaxException {
    URI oldUri = new URI(uri);
    return new URI(oldUri.getScheme(), oldUri.getAuthority(), oldUri.getPath(),
            oldUri.getQuery() == null ? appendQuery : oldUri.getQuery() + "&" + appendQuery, oldUri.getFragment());
}

输出量

http://example.com?name=John
http://example.com?name=John#fragment
http://example.com?email=john.doe@email.com&name=John
http://example.com?email=john.doe@email.com&name=John#fragment


 类似资料:
  • 问题内容: 在pgadmin3中,我想使用参数化查询(为了进行更快的调试,只需从我的php文件中复制并粘贴查询)。但是我还没有找到一个选项添加的价值观,…参数。是否有可能? 这是我正在循环中建立的查询,遵循从这里进行NULL测试的建议: 请注意,手动替换所有参数很繁琐,容易出错,并且可能(我希望)是不必要的。 提前致谢。 问题答案: 我只知道两种方式。 首先是要使用(PostgreSQL手册后的示

  • 问题内容: 至于现在,我将在尝试附加对象时得到提示。我已经在互联网上搜索了一种解决方法。到目前为止,我发现的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。 但是,每次添加新对象时,我都必须覆盖该文件。这似乎不是加班的最佳解决方案。 有没有一种方法可以将对象追加到现有对象流? 问题答案: 实际上,这很容易做到。当您添加到现有流时,需要使用ObjectOutStream的子

  • 问题内容: 我有桌子上的产品 产品 我需要按任何值更新“数量”,例如“ 5 + 3” 需要如下输出 我该如何写查询? 问题答案:

  • 问题内容: 使用Apache的commons-httpclient for Java,向GetMethod实例添加查询参数的最佳方法是什么?如果我使用的是PostMethod,则非常简单: 但是,GetMethod没有“ addParameter”方法。我发现这可行: 但是,我见过的大多数示例都将参数直接硬编码到URL中,例如: 或硬编码查询字符串,例如: 这些模式之一是首选吗?以及为什么Post

  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 6年前关闭。 我有一个mysql查询,但无法为其绑定参数 我已经试过了 但我收到了并且出错了: 警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不

  • 问题内容: 如我所见,java mongo驱动程序不提供从现有gridFS文件获取的功能 我必须直接创建或使用方法。 是否缺少Java驱动程序或gridfs的限制? 除了创建新文件/删除旧文件之外,您能否建议其他解决方法? 谢谢 问题答案: GridFS不是MongoDB的核心功能,而是存储带有随附元数据的二进制数据的约定。您应该能够以通常的方式修改集合中的任何文档,同时保持相应文档的完整性。主要