Như các câu trả lời khác nói rằng không có cách nào nhận được các tham số chuỗi truy vấn bằng api servlet.
Vì vậy, tôi nghĩ cách tốt nhất để lấy các tham số truy vấn là tự phân tích cú pháp chuỗi truy vấn. (Việc lặp lại các tham số và kiểm tra xem chuỗi truy vấn có chứa tham số phức tạp hơn không)
Tôi đã viết mã dưới đây để lấy tham số chuỗi truy vấn. Sử dụng apache StringUtils và ArrayUtils cũng hỗ trợ các giá trị tham số truy vấn được phân tách bằng CSV.
Ví dụ: username=james&username=smith&password=pwd1,pwd2
sẽ trở lại
password : [pwd1, pwd2]
(chiều dài = 2)
username : [james, smith]
(chiều dài = 2)
public static Map<String, String[]> getQueryParameters(HttpServletRequest request) throws UnsupportedEncodingException {
Map<String, String[]> queryParameters = new HashMap<>();
String queryString = request.getQueryString();
if (StringUtils.isNotEmpty(queryString)) {
queryString = URLDecoder.decode(queryString, StandardCharsets.UTF_8.toString());
String[] parameters = queryString.split("&");
for (String parameter : parameters) {
String[] keyValuePair = parameter.split("=");
String[] values = queryParameters.get(keyValuePair[0]);
values = keyValuePair.length == 1 ? ArrayUtils.add(values, "") :
ArrayUtils.addAll(values, keyValuePair[1].split(","));
queryParameters.put(keyValuePair[0], values);
}
}
return queryParameters;
}