|
|
@@ -37,8 +37,10 @@ public class HttpUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 解码 URL 参数
|
|
|
+ * 解码 URL 参数(query parameter)
|
|
|
+ * 注意:此方法会将 + 解码为空格,适用于 query parameter,不适用于 URL path
|
|
|
*
|
|
|
+ * @see #decodeUrlPath(String)
|
|
|
* @param value 参数
|
|
|
* @return 解码后的参数
|
|
|
*/
|
|
|
@@ -46,6 +48,20 @@ public class HttpUtils {
|
|
|
return URLDecoder.decode(value, StandardCharsets.UTF_8);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 解码 URL 路径
|
|
|
+ * 与 {@link #decodeUtf8(String)} 不同,此方法不会将 + 解码为空格,保持 + 为字面字符
|
|
|
+ * 适用于 URL path 部分的解码
|
|
|
+ *
|
|
|
+ * @param path URL 路径
|
|
|
+ * @return 解码后的路径
|
|
|
+ */
|
|
|
+ public static String decodeUrlPath(String path) {
|
|
|
+ // 先将 + 替换为 %2B,避免被 URLDecoder 解码为空格
|
|
|
+ String encoded = path.replace("+", "%2B");
|
|
|
+ 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());
|