如果查询参数值的特殊字符 (&) 部分,如何读取查询参数值
How to read query param value if special character (&) part of query param value
Url: https://myproject.dev.com/methodology/Culture?contentName=abc & def&path=Test&type=folder
只需要从上方获取查询参数 URL 但问题是 contentName=abc & def
中的“&” 因此在获取 contentName 时获取两部分的值,如 abc、def.
请建议获取 contentName 的方法是 abc & def
而不是 abc,def.
如果 & 字符是查询字符串中的名称或值的一部分,则必须对其进行百分比编码。在给定的示例中:contentName=abc%26def&path=Test&type=folder
.
如果我们传递任何类型的特殊字符,我们必须对这些值进行编码。 Java 提供了 URLEncoder
class 用于将任何查询字符串或表单参数编码为 URL 编码格式。编码 URI 时,常见的陷阱之一是对完整的 URI 进行编码。通常,我们只需要对 URI 的查询部分进行编码。
public static void main(String[] args) {
Map<String, String> requestParameters = new LinkedHashMap<>();
requestParameters.put("contentName", "abc & def");
requestParameters.put("path", "Test");
requestParameters.put("type", "folder");
String encodedURL = requestParameters.keySet().stream()
.map(key -> key + "=" + encodeValue(requestParameters.get(key)))
.collect(Collectors.joining("&", "https://myproject.dev.com/methodology/Culture?", ""));
System.out.println(encodedURL);
}
private static String encodeValue(String value) {
String url = "";
try {
url = URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
} catch (Exception ex) {
System.out.println(ex);
}
return url;
}
输出:
https://myproject.dev.com/methodology/Culture?contentName=abc+%26+def&path=Test&type=folder
Url: https://myproject.dev.com/methodology/Culture?contentName=abc & def&path=Test&type=folder
只需要从上方获取查询参数 URL 但问题是 contentName=abc & def
中的“&” 因此在获取 contentName 时获取两部分的值,如 abc、def.
请建议获取 contentName 的方法是 abc & def
而不是 abc,def.
如果 & 字符是查询字符串中的名称或值的一部分,则必须对其进行百分比编码。在给定的示例中:contentName=abc%26def&path=Test&type=folder
.
如果我们传递任何类型的特殊字符,我们必须对这些值进行编码。 Java 提供了 URLEncoder
class 用于将任何查询字符串或表单参数编码为 URL 编码格式。编码 URI 时,常见的陷阱之一是对完整的 URI 进行编码。通常,我们只需要对 URI 的查询部分进行编码。
public static void main(String[] args) {
Map<String, String> requestParameters = new LinkedHashMap<>();
requestParameters.put("contentName", "abc & def");
requestParameters.put("path", "Test");
requestParameters.put("type", "folder");
String encodedURL = requestParameters.keySet().stream()
.map(key -> key + "=" + encodeValue(requestParameters.get(key)))
.collect(Collectors.joining("&", "https://myproject.dev.com/methodology/Culture?", ""));
System.out.println(encodedURL);
}
private static String encodeValue(String value) {
String url = "";
try {
url = URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
} catch (Exception ex) {
System.out.println(ex);
}
return url;
}
输出:
https://myproject.dev.com/methodology/Culture?contentName=abc+%26+def&path=Test&type=folder