diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java index 9de0377..d274981 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java @@ -1,9 +1,7 @@ package cn.iocoder.yudao.framework.common.util.http; import cn.hutool.core.codec.Base64; -import cn.hutool.core.map.TableMap; import cn.hutool.core.net.url.UrlBuilder; -import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; @@ -62,14 +60,10 @@ public class HttpUtils { return URLDecoder.decode(encoded, StandardCharsets.UTF_8); } - @SuppressWarnings("unchecked") public static String replaceUrlQuery(String url, String key, String value) { UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset()); - // 先移除 - TableMap query = (TableMap) - ReflectUtil.getFieldValue(builder.getQuery(), "query"); - query.remove(key); - // 后添加 + // 先移除;再添加 + builder.getQuery().remove(key); builder.addQuery(key, value); return builder.build(); } diff --git a/yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/http/HttpUtilsTest.java b/yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/http/HttpUtilsTest.java new file mode 100644 index 0000000..a42874f --- /dev/null +++ b/yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/http/HttpUtilsTest.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.framework.common.util.http; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * {@link HttpUtils} 的单元测试 + */ +public class HttpUtilsTest { + + @Test + public void testReplaceUrlQuery_replace() { + // 准备参数 + String url = "https://www.iocoder.cn/path?a=1&b=2"; + // 调用 + String result = HttpUtils.replaceUrlQuery(url, "a", "3"); + // 断言:被替换的 key 会移到末尾,原顺序的其它参数保留 + assertEquals("https://www.iocoder.cn/path?b=2&a=3", result); + } + + @Test + public void testReplaceUrlQuery_add() { + // 准备参数 + String url = "https://www.iocoder.cn/path?a=1"; + // 调用 + String result = HttpUtils.replaceUrlQuery(url, "b", "2"); + // 断言 + assertEquals("https://www.iocoder.cn/path?a=1&b=2", result); + } + + @Test + public void testReplaceUrlQuery_noQuery() { + // 准备参数:原 URL 没有 query + String url = "https://www.iocoder.cn/path"; + // 调用 + String result = HttpUtils.replaceUrlQuery(url, "a", "1"); + // 断言 + assertEquals("https://www.iocoder.cn/path?a=1", result); + } + + @Test + public void testReplaceUrlQuery_emptyValue() { + // 准备参数:value 为空字符串 + String url = "https://www.iocoder.cn/path?a=1"; + // 调用 + String result = HttpUtils.replaceUrlQuery(url, "a", ""); + // 断言:保留 key,value 为空 + assertEquals("https://www.iocoder.cn/path?a=", result); + } + +}