HttpServletRequest - Get query string parameters, no form data

前端 未结 6 772
南笙
南笙 2020-12-05 09:08

In HttpServletRequest, getParameterMap returns a Map of all query string parameters and post data parameters.

Is there a way to get a Map of ONLY query

6条回答
  •  旧时难觅i
    2020-12-05 09:44

    As the other answers state there is no way getting query string parameters using servlet api.

    So, I think the best way to get query parameters is parsing the query string yourself. ( It is more complicated iterating over parameters and checking if query string contains the parameter)

    I wrote below code to get query string parameters. Using apache StringUtils and ArrayUtils which supports CSV separated query param values as well.

    Example: username=james&username=smith&password=pwd1,pwd2 will return

    password : [pwd1, pwd2] (length = 2)

    username : [james, smith] (length = 2)

    public static Map getQueryParameters(HttpServletRequest request) throws UnsupportedEncodingException {
        Map 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]);
                //length is one if no value is available.
                values = keyValuePair.length == 1 ? ArrayUtils.add(values, "") :
                        ArrayUtils.addAll(values, keyValuePair[1].split(",")); //handles CSV separated query param values.
                queryParameters.put(keyValuePair[0], values);
            }
        }
        return queryParameters;
    }
    

提交回复
热议问题