diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapBuilder.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapBuilder.java index d0e292572..e4088ebbf 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/MapBuilder.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/MapBuilder.java @@ -30,6 +30,21 @@ public class MapBuilder implements Builder> { private final Map map; + // region ----- of + /** + * 创建Builder,默认HashMap实现 + * + * @param Key类型 + * @param Value类型 + * @param key 键 + * @param value 值 + * @return MapBuilder + */ + public static MapBuilder of(final K key, final V value) { + final MapBuilder builder = of(); + return builder.put(key, value); + } + /** * 创建Builder,默认HashMap实现 * @@ -67,6 +82,7 @@ public class MapBuilder implements Builder> { public static MapBuilder of(final Map map) { return new MapBuilder<>(map); } + // endregion /** * 链式Map创建类 diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java index 46a03395b..5d134c8b4 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/url/UrlBuilder.java @@ -75,6 +75,19 @@ public final class UrlBuilder implements Builder { */ private final boolean needEncodePercent; + // region ----- of + + /** + * 使用UrlBuilder构建UrlBuilder + * + * @param builder {@code UrlBuilder} + * @return UrlBuilder + */ + public static UrlBuilder of(final UrlBuilder builder) { + return of(builder.getScheme(), builder.getHost(), builder.getPort(), builder.getPathStr(), + builder.getQueryStr(), builder.getFragment(), builder.getCharset()); + } + /** * 使用URI构建UrlBuilder * @@ -203,6 +216,7 @@ public final class UrlBuilder implements Builder { public static UrlBuilder of() { return new UrlBuilder(); } + // endregion /** * 构造 diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java index 4b39dbafc..64eccc2cb 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java @@ -358,7 +358,7 @@ public class Request implements HeaderOperation { if (Method.GET.equals(method) && !this.isRest) { final HttpBody body = this.body; if (body instanceof FormBody) { - final UrlBuilder urlBuilder = UrlBuilder.of(this.url.toURL(), this.url.getCharset()); + final UrlBuilder urlBuilder = UrlBuilder.of(this.url); UrlQuery query = urlBuilder.getQuery(); if (null == query) { query = UrlQuery.of(); diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/IssueI85C9STest.java b/hutool-http/src/test/java/org/dromara/hutool/http/IssueI85C9STest.java index 4092db02f..593409445 100644 --- a/hutool-http/src/test/java/org/dromara/hutool/http/IssueI85C9STest.java +++ b/hutool-http/src/test/java/org/dromara/hutool/http/IssueI85C9STest.java @@ -12,28 +12,42 @@ package org.dromara.hutool.http; -import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.core.map.MapBuilder; import org.dromara.hutool.http.client.Request; import org.dromara.hutool.http.client.Response; -import org.dromara.hutool.http.client.engine.httpclient4.HttpClient4Engine; +import org.dromara.hutool.http.client.engine.ClientEngine; +import org.dromara.hutool.http.client.engine.okhttp.OkHttpEngine; import org.dromara.hutool.http.meta.Method; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import java.util.HashMap; - public class IssueI85C9STest { + private final ClientEngine engine = new OkHttpEngine(); @Test @Disabled void getWithFormTest() { + final Response send = Request.of("http://localhost:8888/formTest") .method(Method.GET) - .form(MapBuilder.of(new HashMap()).put("a", 1).put("b", 2).build()) - .send(new HttpClient4Engine()); + .setRest(true) + .form(MapBuilder.of("a", (Object)1).put("b", 2).build()) + .send(engine); - Console.log(send.bodyStr()); + Assertions.assertEquals("{a=[1], b=[2]}", send.bodyStr()); + } + + @Test + @Disabled + void getWithFormAndUrlParamTest() { + + final Response send = Request.of("http://localhost:8888/formTest?c=3") + .method(Method.GET) + .form(MapBuilder.of("a", (Object)1).put("b", 2).build()) + .send(engine); + + Assertions.assertEquals("{a=[1], b=[2], c=[3]}", send.bodyStr()); } }