diff --git a/CHANGELOG.md b/CHANGELOG.md index 578913077..1829f9e0f 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.19.M1 (2023-04-18) +# 5.8.19.M1 (2023-04-19) ### 🐣新特性 +* 【db 】 优化HttpRequest.toString()内容打印(issue#3072@Github) ### 🐞Bug修复 * 【core 】 修复URLUtil.decode无法解码UTF-16问题(issue#3063@Github) diff --git a/hutool-http/src/main/java/cn/hutool/http/HttpBase.java b/hutool-http/src/main/java/cn/hutool/http/HttpBase.java index 41e1d1ba6..982c0bbad 100644 --- a/hutool-http/src/main/java/cn/hutool/http/HttpBase.java +++ b/hutool-http/src/main/java/cn/hutool/http/HttpBase.java @@ -347,14 +347,14 @@ public abstract class HttpBase { @Override public String toString() { final StringBuilder sb = StrUtil.builder(); - sb.append("Request Headers: ").append(StrUtil.CRLF); + sb.append("Headers: ").append(StrUtil.CRLF); for (Entry> entry : this.headers.entrySet()) { sb.append(" ").append( entry.getKey()).append(": ").append(CollUtil.join(entry.getValue(), ",")) .append(StrUtil.CRLF); } - sb.append("Request Body: ").append(StrUtil.CRLF); + sb.append("Body: ").append(StrUtil.CRLF); sb.append(" ").append(StrUtil.str(this.bodyBytes(), this.charset)).append(StrUtil.CRLF); return sb.toString(); 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 1e30a172c..fd6be1eed 100755 --- a/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java +++ b/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java @@ -8,6 +8,7 @@ import cn.hutool.core.io.resource.FileResource; import cn.hutool.core.io.resource.MultiFileResource; import cn.hutool.core.io.resource.Resource; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Console; import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.TableMap; import cn.hutool.core.net.SSLUtil; @@ -29,6 +30,7 @@ import java.io.IOException; import java.net.*; import java.nio.charset.Charset; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; @@ -1144,9 +1146,20 @@ public class HttpRequest extends HttpBase { @Override public String toString() { - StringBuilder sb = StrUtil.builder(); + final StringBuilder sb = StrUtil.builder(); sb.append("Request Url: ").append(this.url.setCharset(this.charset)).append(StrUtil.CRLF); - sb.append(super.toString()); + + // header + sb.append("Request Headers: ").append(StrUtil.CRLF); + for (Map.Entry> entry : this.headers.entrySet()) { + sb.append(" ").append( + entry.getKey()).append(": ").append(CollUtil.join(entry.getValue(), ",")) + .append(StrUtil.CRLF); + } + + // body + sb.append("Request Body: ").append(StrUtil.CRLF); + sb.append(" ").append(createBody()).append(StrUtil.CRLF); return sb.toString(); } @@ -1342,13 +1355,21 @@ public class HttpRequest extends HttpBase { } // Write的时候会优先使用body中的内容,write时自动关闭OutputStream - RequestBody body; + createBody().writeClose(this.httpConnection.getOutputStream()); + } + + /** + * 创建body + * + * @return body + */ + private RequestBody createBody(){ + // Write的时候会优先使用body中的内容,write时自动关闭OutputStream if (null != this.body) { - body = ResourceBody.create(this.body); + return ResourceBody.create(this.body); } else { - body = FormUrlEncodedBody.create(this.form, this.charset); + return FormUrlEncodedBody.create(this.form, this.charset); } - body.writeClose(this.httpConnection.getOutputStream()); } /** diff --git a/hutool-http/src/main/java/cn/hutool/http/body/FormUrlEncodedBody.java b/hutool-http/src/main/java/cn/hutool/http/body/FormUrlEncodedBody.java index aa675b0a2..c17e58cf0 100644 --- a/hutool-http/src/main/java/cn/hutool/http/body/FormUrlEncodedBody.java +++ b/hutool-http/src/main/java/cn/hutool/http/body/FormUrlEncodedBody.java @@ -3,6 +3,7 @@ package cn.hutool.http.body; import cn.hutool.core.net.url.UrlQuery; import cn.hutool.core.util.StrUtil; +import java.io.ByteArrayOutputStream; import java.nio.charset.Charset; import java.util.Map; @@ -35,4 +36,10 @@ public class FormUrlEncodedBody extends BytesBody { super(StrUtil.bytes(UrlQuery.of(form, true).build(charset), charset)); } + @Override + public String toString() { + final ByteArrayOutputStream result = new ByteArrayOutputStream(); + write(result); + return result.toString(); + } } diff --git a/hutool-http/src/main/java/cn/hutool/http/body/ResourceBody.java b/hutool-http/src/main/java/cn/hutool/http/body/ResourceBody.java index af5b91ce6..59f2d971c 100644 --- a/hutool-http/src/main/java/cn/hutool/http/body/ResourceBody.java +++ b/hutool-http/src/main/java/cn/hutool/http/body/ResourceBody.java @@ -39,4 +39,9 @@ public class ResourceBody implements RequestBody { this.resource.writeTo(out); } } + + @Override + public String toString() { + return this.resource.readUtf8Str(); + } } 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 5ecb76989..06d777bc5 100644 --- a/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/HttpRequestTest.java @@ -52,9 +52,9 @@ public class HttpRequestTest { @Test @Ignore public void toStringTest() { - final String url = "http://gc.ditu.aliyun.com/geocoding?ccc=你好"; + final String url = "https://hutool.cn?ccc=你好"; - final HttpRequest request = HttpRequest.get(url).body("a=乌海"); + final HttpRequest request = HttpRequest.get(url).form("a", "测试"); Console.log(request.toString()); }