/** * Parse the URL parameters into a map of (key, value) pairs. * * @param uri The URL that was requested. * @return A map of (key, value) pairs corresponding to the request parameters. * @throws UnsupportedEncodingException Thrown if we could not decode the URL with utf8. */ private static Map<String, String> getURLParams(URI uri) throws UnsupportedEncodingException { if (uri.getQuery() != null) { Map<String, String> urlParams = new HashMap<>(); String query = uri.getQuery(); String[] queryFields = query.replace("\\&", "___AMP___").split("&"); for (String queryField : queryFields) { queryField = queryField.replace("___AMP___", "&"); int firstEq = queryField.indexOf('='); // Convention uses "+" for spaces. String key = URLDecoder.decode(queryField.substring(0, firstEq), "utf8"); String value = URLDecoder.decode(queryField.substring(firstEq + 1), "utf8"); urlParams.put(key, value); } return urlParams; } else { return Collections.emptyMap(); } }