mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
UrlQuery增加setStrict方法,区分是否严格模式
This commit is contained in:
parent
bcc21df50a
commit
18e73eaa3b
@ -2,9 +2,10 @@
|
|||||||
# 🚀Changelog
|
# 🚀Changelog
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
# 5.8.20(2023-05-27)
|
# 5.8.20(2023-05-28)
|
||||||
|
|
||||||
### 🐣新特性
|
### 🐣新特性
|
||||||
|
* 【core 】 UrlQuery增加setStrict方法,区分是否严格模式(issue#I78PB1@Gitee)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
|
|
||||||
|
@ -69,12 +69,26 @@ public class RFC3986 {
|
|||||||
*/
|
*/
|
||||||
public static final PercentCodec QUERY_PARAM_VALUE = PercentCodec.of(QUERY).removeSafe('&');
|
public static final PercentCodec QUERY_PARAM_VALUE = PercentCodec.of(QUERY).removeSafe('&');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query中的value编码器,严格模式,value中不能包含任何分隔符。
|
||||||
|
*
|
||||||
|
* @since 6.0.0
|
||||||
|
*/
|
||||||
|
public static final PercentCodec QUERY_PARAM_VALUE_STRICT = UNRESERVED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* query中的key<br>
|
* query中的key<br>
|
||||||
* key不能包含"{@code &}" 和 "="
|
* key不能包含"{@code &}" 和 "="
|
||||||
*/
|
*/
|
||||||
public static final PercentCodec QUERY_PARAM_NAME = PercentCodec.of(QUERY_PARAM_VALUE).removeSafe('=');
|
public static final PercentCodec QUERY_PARAM_NAME = PercentCodec.of(QUERY_PARAM_VALUE).removeSafe('=');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* query中的key编码器,严格模式,key中不能包含任何分隔符。
|
||||||
|
*
|
||||||
|
* @since 6.0.0
|
||||||
|
*/
|
||||||
|
public static final PercentCodec QUERY_PARAM_NAME_STRICT = UNRESERVED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||||
*
|
*
|
||||||
|
@ -33,6 +33,10 @@ public class UrlQuery {
|
|||||||
* 是否为x-www-form-urlencoded模式,此模式下空格会编码为'+'
|
* 是否为x-www-form-urlencoded模式,此模式下空格会编码为'+'
|
||||||
*/
|
*/
|
||||||
private final boolean isFormUrlEncoded;
|
private final boolean isFormUrlEncoded;
|
||||||
|
/**
|
||||||
|
* 是否严格模式,严格模式下,query的name和value中均不允许有分隔符。
|
||||||
|
*/
|
||||||
|
private boolean isStrict;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建UrlQuery
|
* 构建UrlQuery
|
||||||
@ -136,6 +140,17 @@ public class UrlQuery {
|
|||||||
this.isFormUrlEncoded = isFormUrlEncoded;
|
this.isFormUrlEncoded = isFormUrlEncoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置是否严格模式
|
||||||
|
* @param strict 是否严格模式
|
||||||
|
* @return this
|
||||||
|
* @since 5.8.20
|
||||||
|
*/
|
||||||
|
public UrlQuery setStrict(final boolean strict) {
|
||||||
|
isStrict = strict;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 增加键值对
|
* 增加键值对
|
||||||
*
|
*
|
||||||
@ -254,6 +269,9 @@ public class UrlQuery {
|
|||||||
return build(FormUrlencoded.ALL, FormUrlencoded.ALL, charset, encodePercent);
|
return build(FormUrlencoded.ALL, FormUrlencoded.ALL, charset, encodePercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isStrict) {
|
||||||
|
return build(RFC3986.QUERY_PARAM_NAME_STRICT, RFC3986.QUERY_PARAM_VALUE_STRICT, charset, encodePercent);
|
||||||
|
}
|
||||||
return build(RFC3986.QUERY_PARAM_NAME, RFC3986.QUERY_PARAM_VALUE, charset, encodePercent);
|
return build(RFC3986.QUERY_PARAM_NAME, RFC3986.QUERY_PARAM_VALUE, charset, encodePercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,4 +144,15 @@ public class UrlQueryTest {
|
|||||||
final UrlQuery query = UrlQuery.of(queryStr, null);
|
final UrlQuery query = UrlQuery.of(queryStr, null);
|
||||||
Assert.assertEquals(queryStr, query.toString());
|
Assert.assertEquals(queryStr, query.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void issueI78PB1Test() {
|
||||||
|
// 严格模式
|
||||||
|
final UrlQuery query = new UrlQuery().setStrict(true);
|
||||||
|
query.add(":/?#[]@!$&'()*+,;= ", ":/?#[]@!$&'()*+,;= ");
|
||||||
|
|
||||||
|
final String string = query.build(CharsetUtil.CHARSET_UTF_8);
|
||||||
|
Assert.assertEquals("%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%20=" +
|
||||||
|
"%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%20", string);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user