在 Java 中,我们可以使用多个库来动态地向 URL 中添加查询并保证 URL 的有效性。
在本文中,我们将学习如何使用其中的三个库。这三个库都执行完全相同的任务,因此我们会发现生成的 URL 相同。
2、Java EE 7 UriBuilder
与内置 Java 解决方案最接近的是 javax.ws.rs-api 中的 UriBuilder,我们需要将其导入到我们的 pom.xml 中:
代码语言:javascript复制<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:
代码语言:javascript复制@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 中:
代码语言:javascript复制<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
最新版本可以在 Maven 存储库中找到。
要使用它,我们首先使用我们的基本 URL 字符串调用 URIBuilder 构造函数。然后使用其 builder 方法 addParameter() 来附加我们的参数,最后调用 build():
代码语言:javascript复制@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 依赖项:
代码语言:javascript复制<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>6.0.6</version>
</dependency>
我们可以在 Maven 存储库中找到最新版本。
我们可以使用 UriComponentsBuilder 通过 fromUriString() 创建一个 URI,然后使用 queryParam() 追加查询:
代码语言:javascript复制@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