From ef0fc738f1eff039715afe88a9969eb22919b14e Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 27 Aug 2022 01:10:13 +0800 Subject: [PATCH] =?UTF-8?q?UrlBuilder.addPath=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BC=A0=E5=85=A5=E9=9D=9E=E6=9C=89=E6=95=88=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=97=B6=EF=BC=8C=E4=BC=9A=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../cn/hutool/core/net/url/UrlBuilder.java | 11 +++++++ .../java/cn/hutool/core/net/url/UrlPath.java | 4 ++- .../cn/hutool/core/net/UrlBuilderTest.java | 29 ++++++++++++------- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 137c7af05..2ab1d581a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ * 【core 】 修复UrlBuilder的toURI方法将url重复编码(issue#2503@Github) * 【core 】 修复CollUtil.lastIndexOf序号错误问题 * 【core 】 修复zip被识别成jar和apk被识别成jar或zip的问题(pr#2548@Github) +* 【core 】 修复UrlBuilder.addPath 方法传入非有效路径字符串时,会出现空指针异常的问题(issue#I5O4ML@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java index 86a5138d7..2689748a3 100755 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlBuilder.java @@ -187,11 +187,22 @@ public final class UrlBuilder implements Builder { * 创建空的UrlBuilder * * @return UrlBuilder + * @deprecated 请使用 {@link #of()} */ + @Deprecated public static UrlBuilder create() { return new UrlBuilder(); } + /** + * 创建空的UrlBuilder + * + * @return UrlBuilder + */ + public static UrlBuilder of() { + return new UrlBuilder(); + } + /** * 构造 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java index 868025993..b0168c3a1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/url/UrlPath.java @@ -1,10 +1,12 @@ package cn.hutool.core.net.url; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.net.RFC3986; import cn.hutool.core.net.URLDecoder; import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import java.nio.charset.Charset; @@ -52,7 +54,7 @@ public class UrlPath { * @return 节点列表 */ public List getSegments() { - return this.segments; + return ObjectUtil.defaultIfNull(this.segments, ListUtil.empty()); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java index 35e7fc346..019f001d3 100644 --- a/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/net/UrlBuilderTest.java @@ -16,17 +16,17 @@ public class UrlBuilderTest { @Test public void buildTest() { - final String buildUrl = UrlBuilder.create().setHost("www.hutool.cn").build(); + final String buildUrl = UrlBuilder.of().setHost("www.hutool.cn").build(); Assert.assertEquals("http://www.hutool.cn/", buildUrl); } @Test public void buildWithoutSlashTest(){ // https://github.com/dromara/hutool/issues/2459 - String buildUrl = UrlBuilder.create().setScheme("http").setHost("192.168.1.1").setPort(8080).setWithEndTag(false).build(); + String buildUrl = UrlBuilder.of().setScheme("http").setHost("192.168.1.1").setPort(8080).setWithEndTag(false).build(); Assert.assertEquals("http://192.168.1.1:8080", buildUrl); - buildUrl = UrlBuilder.create().setScheme("http").setHost("192.168.1.1").setPort(8080).addQuery("url", "http://192.168.1.1/test/1") + buildUrl = UrlBuilder.of().setScheme("http").setHost("192.168.1.1").setPort(8080).addQuery("url", "http://192.168.1.1/test/1") .setWithEndTag(false).build(); Assert.assertEquals("http://192.168.1.1:8080?url=http://192.168.1.1/test/1", buildUrl); } @@ -40,7 +40,7 @@ public class UrlBuilderTest { @Test public void testHost() { - final String buildUrl = UrlBuilder.create() + final String buildUrl = UrlBuilder.of() .setScheme("https") .setHost("www.hutool.cn").build(); Assert.assertEquals("https://www.hutool.cn/", buildUrl); @@ -48,7 +48,7 @@ public class UrlBuilderTest { @Test public void testHostPort() { - final String buildUrl = UrlBuilder.create() + final String buildUrl = UrlBuilder.of() .setScheme("https") .setHost("www.hutool.cn") .setPort(8080) @@ -58,7 +58,7 @@ public class UrlBuilderTest { @Test public void testPathAndQuery() { - final String buildUrl = UrlBuilder.create() + final String buildUrl = UrlBuilder.of() .setScheme("https") .setHost("www.hutool.cn") .addPath("/aaa").addPath("bbb") @@ -71,7 +71,7 @@ public class UrlBuilderTest { @Test public void testQueryWithChinese() { - final String buildUrl = UrlBuilder.create() + final String buildUrl = UrlBuilder.of() .setScheme("https") .setHost("www.hutool.cn") .addPath("/aaa").addPath("bbb") @@ -84,7 +84,7 @@ public class UrlBuilderTest { @Test public void testMultiQueryWithChinese() { - final String buildUrl = UrlBuilder.create() + final String buildUrl = UrlBuilder.of() .setScheme("https") .setHost("www.hutool.cn") .addPath("/s") @@ -314,7 +314,7 @@ public class UrlBuilderTest { @Test public void addPathEncodeTest(){ - final String url = UrlBuilder.create() + final String url = UrlBuilder.of() .setScheme("https") .setHost("domain.cn") .addPath("api") @@ -328,7 +328,7 @@ public class UrlBuilderTest { @Test public void addPathEncodeTest2(){ // https://github.com/dromara/hutool/issues/1912 - final String url = UrlBuilder.create() + final String url = UrlBuilder.of() .setScheme("https") .setHost("domain.cn") .addPath("/api/xxx/bbb") @@ -462,4 +462,13 @@ public class UrlBuilderTest { .toString(); Assert.assertEquals(duplicate, normal); } + + @Test + public void addPathTest(){ + //https://gitee.com/dromara/hutool/issues/I5O4ML + UrlBuilder.of().addPath(""); + UrlBuilder.of().addPath("/"); + UrlBuilder.of().addPath("//"); + UrlBuilder.of().addPath("//a"); + } }