public static MultiValueMap<String, String> getQueryStringParameters(HttpServletRequest request) {
    // Manually parse the query string rather than use HttpServletRequest#getParameter so that
    // the message body remains intact and available.  Calling HttpServletRequest#getParameter
    // could interfere with processing the body of this request later since the body needs to be
    // parsed to find any form parameters.
    String queryString = request.getQueryString();
    return (StringUtils.isEmpty(queryString))
        ? null
        : UriComponentsBuilder.newInstance().query(queryString).build().getQueryParams();
  }
Returns a {@link MultiValueMap} of the parameters parsed from the request's query string.  The
returned map will not contain any parameters that may be in the body of the request as form data.
<p>
This implementation manually parses the query string rather than use {@link HttpServletRequest#getParameterValues(String)}
so that the message body remains intact and available.  Calling {@link HttpServletRequest#getParameterValues(String)}
could interfere with processing the body of this request later since the body is parsed to find
any form parameters.

@param request the {@link HttpServletRequest}
@return a Map of query parameters to values
ambari-server/src/main/java/org/apache/ambari/server/utils/RequestUtils.java