add method

This commit is contained in:
Looly 2021-09-17 19:29:18 +08:00
parent 96c83cb16b
commit aafcecc3d9
3 changed files with 56 additions and 5 deletions

View File

@ -10,6 +10,7 @@
* 【http 】 HttpBase增加clearHeaders方法issue#I49P23@Gitee * 【http 】 HttpBase增加clearHeaders方法issue#I49P23@Gitee
* 【core 】 CsvWriter的write和writeBeans参数改为Iterableissue#I49O4S@Gitee * 【core 】 CsvWriter的write和writeBeans参数改为Iterableissue#I49O4S@Gitee
* 【core 】 BitStatusUtil添加来源声明issue#1824@Github * 【core 】 BitStatusUtil添加来源声明issue#1824@Github
* 【core 】 UrlQuery.build增加重载支持可选是否转义issue#I4AIX1@Gitee
* *
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复FuncKey函数无效问题 * 【core 】 修复FuncKey函数无效问题

View File

@ -173,9 +173,9 @@ public class UrlQuery {
} }
} }
if(i - pos == len){ if (i - pos == len) {
// 没有任何参数符号 // 没有任何参数符号
if(queryStr.startsWith("http") || queryStr.contains("/")){ if (queryStr.startsWith("http") || queryStr.contains("/")) {
// 可能为url路径忽略之 // 可能为url路径忽略之
return this; return this;
} }
@ -216,6 +216,18 @@ public class UrlQuery {
* @return URL查询字符串 * @return URL查询字符串
*/ */
public String build(Charset charset) { public String build(Charset charset) {
return build(charset, true);
}
/**
* 构建URL查询字符串即将key-value键值对转换为key1=v1&key2=&key3=v3形式
*
* @param charset encode编码null表示不做encode编码
* @param isEncode 是否转义键和值
* @return URL查询字符串
* @since 5.7.13
*/
public String build(Charset charset, boolean isEncode) {
if (MapUtil.isEmpty(this.query)) { if (MapUtil.isEmpty(this.query)) {
return StrUtil.EMPTY; return StrUtil.EMPTY;
} }
@ -232,10 +244,10 @@ public class UrlQuery {
} }
key = entry.getKey(); key = entry.getKey();
if (null != key) { if (null != key) {
sb.append(URLUtil.encodeAll(StrUtil.str(key), charset)); sb.append(toStr(key, charset, isEncode));
value = entry.getValue(); value = entry.getValue();
if (null != value) { if (null != value) {
sb.append("=").append(URLUtil.encodeAll(StrUtil.str(value), charset)); sb.append("=").append(toStr(value, charset, isEncode));
} }
} }
} }
@ -287,4 +299,21 @@ public class UrlQuery {
this.query.put(URLUtil.decode(value, charset), null); this.query.put(URLUtil.decode(value, charset), null);
} }
} }
/**
* 键值对的{@link CharSequence}转换为String可选是否转义
*
* @param str 原字符串
* @param charset 编码只用于encode中
* @param isEncode 是否转义
* @return 转换后的String
* @since 5.7.13
*/
private static String toStr(CharSequence str, Charset charset, boolean isEncode) {
String result = StrUtil.str(str);
if (isEncode) {
result = URLUtil.encodeAll(result, charset);
}
return result;
}
} }

View File

@ -442,7 +442,9 @@ public class HttpUtil {
* @param paramMap 表单数据 * @param paramMap 表单数据
* @param charsetName 编码 * @param charsetName 编码
* @return url参数 * @return url参数
* @deprecated 请使用 {@link #toParams(Map, Charset)}
*/ */
@Deprecated
public static String toParams(Map<String, Object> paramMap, String charsetName) { public static String toParams(Map<String, Object> paramMap, String charsetName) {
return toParams(paramMap, CharsetUtil.charset(charsetName)); return toParams(paramMap, CharsetUtil.charset(charsetName));
} }
@ -461,7 +463,26 @@ public class HttpUtil {
* @return url参数 * @return url参数
*/ */
public static String toParams(Map<String, ?> paramMap, Charset charset) { public static String toParams(Map<String, ?> paramMap, Charset charset) {
return URLUtil.buildQuery(paramMap, charset); return toParams(paramMap, charset, true);
}
/**
* 将Map形式的Form表单数据转换为Url参数形式<br>
* paramMap中如果key为空null和""会被忽略如果value为null会被做为空白符""<br>
* 会自动url编码键和值
*
* <pre>
* key1=v1&amp;key2=&amp;key3=v3
* </pre>
*
* @param paramMap 表单数据
* @param charset 编码null表示不encode键值对
* @param isEncode 是否转义键和值
* @return url参数
* @since 5.7.13
*/
public static String toParams(Map<String, ?> paramMap, Charset charset, boolean isEncode) {
return UrlQuery.of(paramMap).build(charset, isEncode);
} }
/** /**