【译】Java 构造 URL 请求链接的推荐姿势

在 Java 中,我们可以使用多个库来动态地向 URL 中添加查询并保证 URL 的有效性。

在本文中,我们将学习如何使用其中的三个库。这三个库都执行完全相同的任务,因此我们会发现生成的 URL 相同。

2、Java EE 7 UriBuilder

与内置 Java 解决方案最接近的是 javax.ws.rs-api 中的 UriBuilder,我们需要将其导入到我们的 pom.xml 中:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
</dependency>

最新版本可以在 Maven 存储库中找到。我们可能还需要导入 jersey-commons 才能运行我们的应用程序。

UriBuilder 对象提供了 fromUri() 方法来创建基本 URI,并提供了 queryParam() 方法来添加查询。然后,我们可以调用 build() 方法返回一个 URI:

@Test
void whenUsingJavaUriBuilder_thenParametersAreCorrectlyAdded() {
    
    
    String url = "baeldung.com";
    String key = "article";
    String value = "beta";
    URI uri = UriBuilder.fromUri(url)
      .queryParam(key, value)
      .build();

    assertEquals("baeldung.com?article=beta", uri.toString());
}

如上所示,URL 看起来符合预期,查询被正确添加。

3、Apache UriBuilder

Apache 提供了自己的解决方案,即 HttpClient 包中的 UriBuilder。为了使用它,我们需要将其添加到我们的 pom.xml 中:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

最新版本可以在 Maven 存储库中找到。

要使用它,我们首先使用我们的基本 URL 字符串调用 URIBuilder 构造函数。然后使用其 builder 方法 addParameter() 来附加我们的参数,最后调用 build():

@Test
void whenUsingApacheUriBuilder_thenParametersAreCorrectlyAdded() {
    
    
    String url = "baeldung.com";
    String key = "article";
    String value = "alpha";
    URI uri = new URIBuilder(url).addParameter(key, value)
      .build();

    assertEquals("baeldung.com?article=alpha", uri.toString());
}

4、Spring UriComponentsBuilder

如果我们有一个 Spring 应用程序,使用 Spring 提供的 UriComponentsBuilder 可能是有意义的。为了使用它,我们需要在 pom.xml 中添加 spring-web 依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>6.0.6</version>
</dependency>

我们可以在 Maven 存储库中找到最新版本。

我们可以使用 UriComponentsBuilder 通过 fromUriString() 创建一个 URI,然后使用 queryParam() 追加查询:

@Test
void whenUsingSpringUriComponentsBuilder_thenParametersAreCorrectlyAdded() {
    
    
    String url = "baeldung.com";
    String key = "article";
    String value = "charlie";
    URI uri = UriComponentsBuilder.fromUriString(url)
      .queryParam(key, value)
      .build()
      .toUri();

    assertEquals("baeldung.com?article=charlie", uri.toString());
}

与其他库不同,build() 方法返回一个 UriComponents 对象,因此要使用 URI 完成操作,我们还需要调用 toURI()。

5、结论

在本文中,我们看到了在 Java 中操作 URL 的三种方法。我们可以使用 Java 扩展包、Apache 的 UriBuilder 或 spring-web 解决方案来添加查询,每种方法都能确保 URL 结构有效,并允许我们动态地构建它们。

因此,决定在应用程序中使用哪种方法取决于我们可用的包和导入,以及我们已经使用的方法。每个库都提供了一系列有用的功能,因此我们还应考虑是否可以同时满足项目中的其他需求。

与往常一样,示例的完整代码可以在 GitHub 上找到。

原文地址:https://www.baeldung.com/java-url-query-manipulation


创作不易,如果本文对你有帮助,欢迎点赞、收藏加关注,你的支持和鼓励,是我创作的最大动力。
在这里插入图片描述

欢迎加入我的知识星球,知识星球ID:15165241 一起交流学习。
https://t.zsxq.com/Z3bAiea 申请时标注来自CSDN。

欢迎加入我们的 slack 工作区,在里面可以对ai 和我进行提问。
https://join.slack.com/t/ai-yx51081/shared_invite/zt-1t8cp1lk3-ZMAFutZcN3PCW~8WQDGjPg

猜你喜欢

转载自blog.csdn.net/w605283073/article/details/130445303