fix null bug

This commit is contained in:
Looly 2022-04-10 11:18:54 +08:00
parent fbeb5ab28b
commit 569877e0ef
5 changed files with 20 additions and 11 deletions

View File

@ -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 * 【core 】 修复UserAgentUtil识别Linux出错issue#I50YGY@Gitee
* 【poi 】 修复ExcelWriter.getDisposition方法生成错误issue#2239@Github * 【poi 】 修复ExcelWriter.getDisposition方法生成错误issue#2239@Github
* 【core 】 修复UrlBuilder重复编码的问题issue#2243@Github * 【core 】 修复UrlBuilder重复编码的问题issue#2243@Github
* 【http 】 修复HttpRequest中urlQuery处理get请求参数的时候会导致空指针异常pr#2248@Github
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------

View File

@ -371,9 +371,10 @@ public final class UrlBuilder implements Builder<String> {
} }
/** /**
* 获取查询语句例如a=1&amp;b=2 * 获取查询语句例如a=1&amp;b=2<br>
* 可能为{@code null}
* *
* @return 查询语句例如a=1&amp;b=2 * @return 查询语句例如a=1&amp;b=2可能为{@code null}
*/ */
public UrlQuery getQuery() { public UrlQuery getQuery() {
return query; return query;

View File

@ -139,6 +139,13 @@ public class UrlBuilderTest {
Assert.assertEquals("frag1", builder.getFragment()); 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 @Test
public void ofWithChineseTest() { 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); final UrlBuilder builder = UrlBuilder.ofHttp("www.hutool.cn/aaa/bbb/?a=张三&b=%e6%9d%8e%e5%9b%9b#frag1", CharsetUtil.CHARSET_UTF_8);

View File

@ -1174,15 +1174,17 @@ public class HttpRequest extends HttpBase<HttpRequest> {
*/ */
private void urlWithParamIfGet() { private void urlWithParamIfGet() {
if (Method.GET.equals(method) && false == this.isRest && this.redirectCount <= 0) { if (Method.GET.equals(method) && false == this.isRest && this.redirectCount <= 0) {
if (this.url.getQuery() == null) { UrlQuery query = this.url.getQuery();
this.url.setQuery(new UrlQuery()); if (null == query) {
query = new UrlQuery();
this.url.setQuery(query);
} }
// 优先使用body形式的参数不存在使用form // 优先使用body形式的参数不存在使用form
if (ArrayUtil.isNotEmpty(this.bodyBytes)) { 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 { } else {
this.url.getQuery().addAll(this.form); query.addAll(this.form);
} }
} }
} }

View File

@ -2,7 +2,6 @@ package cn.hutool.http;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.net.SSLProtocols; import cn.hutool.core.net.SSLProtocols;
import cn.hutool.core.net.url.UrlBuilder; import cn.hutool.core.net.url.UrlBuilder;
@ -198,12 +197,11 @@ public class HttpRequestTest {
@Test @Test
@Ignore @Ignore
public void urlWithParamIfGet(){ public void urlWithParamIfGetTest(){
UrlBuilder urlBuilder = new UrlBuilder(); UrlBuilder urlBuilder = new UrlBuilder();
urlBuilder.setScheme("https").setHost("hutool.cn"); urlBuilder.setScheme("https").setHost("hutool.cn");
HttpRequest httpRequest = new HttpRequest(urlBuilder); HttpRequest httpRequest = new HttpRequest(urlBuilder);
httpRequest.setMethod(Method.GET); httpRequest.setMethod(Method.GET).execute();
HttpResponse httpResponse = httpRequest.execute();
} }
} }