Como dicen las otras respuestas, no hay forma de obtener parámetros de cadena de consulta usando la API de servlet.
Entonces, creo que la mejor manera de obtener parámetros de consulta es analizar la cadena de consulta usted mismo. (Es más complicado iterar sobre los parámetros y verificar si la cadena de consulta contiene el parámetro)
Escribí el siguiente código para obtener los parámetros de la cadena de consulta. Usando apache StringUtils y ArrayUtils que también admite valores de parámetros de consulta separados por CSV.
Ejemplo: username=james&username=smith&password=pwd1,pwd2
volverá
password : [pwd1, pwd2]
(longitud = 2)
username : [james, smith]
(longitud = 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;
}