package net.dev123.commons.util; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import org.apache.http.protocol.HTTP; public class UrlUtil { public static <T> String appendQueryParameters(String url, final Map<String, T> parameters) throws UnsupportedEncodingException { return appendQueryParameters(url, parameters, null); } public static <T> String appendQueryParameters(String url, final Map<String, T> parameters, final String encoding) throws UnsupportedEncodingException { final StringBuilder result = new StringBuilder(); if (url == null || parameters == null || parameters.size() == 0) { return result.toString(); } String tempEncoding = (encoding != null ? encoding : HTTP.DEFAULT_CONTENT_CHARSET); for (Map.Entry<String, T> entry : parameters.entrySet()) { if (result.length() > 0) { result.append("&"); } result.append(URLEncoder.encode(entry.getKey(), tempEncoding)); result.append("="); result.append(URLEncoder.encode(String.valueOf(entry.getValue()), tempEncoding)); } if (url.indexOf("?") < 0) { result.insert(0, "?"); } else { result.insert(0, "&"); } result.insert(0, url); return result.toString(); } public static Map<String, String> extractQueryStringParameters(URI uri){ if (uri == null){ return null; } Map<String, String> parameters = null; final String query = uri.getRawQuery(); if (StringUtil.isNotEmpty(query)) { parameters = new HashMap<String, String>(); Scanner scanner = new Scanner(query); scanner.useDelimiter("&"); while (scanner.hasNext()) { final String[] nameValue = scanner.next().split("="); if (nameValue.length == 0 || nameValue.length > 2){ throw new IllegalArgumentException("Bad parameter"); } final String name = nameValue[0]; String value = null; if (nameValue.length == 2){ value = nameValue[1]; } parameters.put(name, value); } } return parameters; } public static String encode(String str) { if (StringUtil.isEmpty(str)) { return str; } try { str = URLEncoder.encode(str, "UTF-8"); } catch (UnsupportedEncodingException e) { } return str; } }