From 569877e0ef4a6c94b5a3d731c2861dc04700b37a Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 10 Apr 2022 11:18:54 +0800 Subject: [PATCH] fix null bug --- CHANGELOG.md | 3 ++- .../main/java/cn/hutool/core/net/url/UrlBuilder.java | 5 +++-- .../test/java/cn/hutool/core/net/UrlBuilderTest.java | 7 +++++++ .../src/main/java/cn/hutool/http/HttpRequest.java | 10 ++++++---- .../src/test/java/cn/hutool/http/HttpRequestTest.java | 6 ++---- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ecc5bfb9..b456514fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.8.0.M3 (2022-04-08) +# 5.8.0.M3 (2022-04-10) ### ❌不兼容特性 @@ -17,6 +17,7 @@ * 【core 】 修复UserAgentUtil识别Linux出错(issue#I50YGY@Gitee) * 【poi 】 修复ExcelWriter.getDisposition方法生成错误(issue#2239@Github) * 【core 】 修复UrlBuilder重复编码的问题(issue#2243@Github) +* 【http 】 修复HttpRequest中urlQuery,处理get请求参数的时候会导致空指针异常(pr#2248@Github) ------------------------------------------------------------------------------------------------------------- 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 33ada0585..ccf54a4ee 100644 --- 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 @@ -371,9 +371,10 @@ public final class UrlBuilder implements Builder { } /** - * 获取查询语句,例如a=1&b=2 + * 获取查询语句,例如a=1&b=2
+ * 可能为{@code null} * - * @return 查询语句,例如a=1&b=2 + * @return 查询语句,例如a=1&b=2,可能为{@code null} */ public UrlQuery getQuery() { return query; 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 e73ca1b2c..6ccc548c4 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 @@ -139,6 +139,13 @@ public class UrlBuilderTest { Assert.assertEquals("frag1", builder.getFragment()); } + @Test + public void ofNullQueryTest() { + final UrlBuilder builder = UrlBuilder.of("http://www.hutool.cn/aaa/bbb", CharsetUtil.CHARSET_UTF_8); + Assert.assertNotNull(builder.getQuery()); + Assert.assertNull(builder.getQuery().get("a")); + } + @Test public void ofWithChineseTest() { final UrlBuilder builder = UrlBuilder.ofHttp("www.hutool.cn/aaa/bbb/?a=张三&b=%e6%9d%8e%e5%9b%9b#frag1", CharsetUtil.CHARSET_UTF_8); diff --git a/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java b/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java index cd4884017..c7c7df8e8 100644 --- a/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java +++ b/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java @@ -1174,15 +1174,17 @@ public class HttpRequest extends HttpBase { */ private void urlWithParamIfGet() { if (Method.GET.equals(method) && false == this.isRest && this.redirectCount <= 0) { - if (this.url.getQuery() == null) { - this.url.setQuery(new UrlQuery()); + UrlQuery query = this.url.getQuery(); + if (null == query) { + query = new UrlQuery(); + this.url.setQuery(query); } // 优先使用body形式的参数,不存在使用form if (ArrayUtil.isNotEmpty(this.bodyBytes)) { - this.url.getQuery().parse(StrUtil.str(this.bodyBytes, this.charset), this.charset); + query.parse(StrUtil.str(this.bodyBytes, this.charset), this.charset); } else { - this.url.getQuery().addAll(this.form); + query.addAll(this.form); } } } diff --git a/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java b/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java index dd7ebaa9b..765218027 100644 --- a/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java @@ -2,7 +2,6 @@ package cn.hutool.http; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.TimeInterval; -import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Console; import cn.hutool.core.net.SSLProtocols; import cn.hutool.core.net.url.UrlBuilder; @@ -198,12 +197,11 @@ public class HttpRequestTest { @Test @Ignore - public void urlWithParamIfGet(){ + public void urlWithParamIfGetTest(){ UrlBuilder urlBuilder = new UrlBuilder(); urlBuilder.setScheme("https").setHost("hutool.cn"); HttpRequest httpRequest = new HttpRequest(urlBuilder); - httpRequest.setMethod(Method.GET); - HttpResponse httpResponse = httpRequest.execute(); + httpRequest.setMethod(Method.GET).execute(); } }