package com.shizhefei.mvc.http; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.Map; import java.util.Map.Entry; public class UrlBuilder { private String url; private LinkedList<String> paths = new LinkedList<String>(); private LinkedHashMap<String, Object> params = new LinkedHashMap<String, Object>(); public UrlBuilder(String url) { super(); this.url = url; } public UrlBuilder sp(Object path) { paths.add(String.valueOf(path)); return this; } public UrlBuilder param(String param, String value) { params.put(param, value); return this; } public UrlBuilder param(String param, int value) { params.put(param, value); return this; } public UrlBuilder param(String param, boolean value) { params.put(param, value); return this; } public UrlBuilder param(String param, double value) { params.put(param, value); return this; } public UrlBuilder param(String param, float value) { params.put(param, value); return this; } public UrlBuilder param(String param, byte value) { params.put(param, value); return this; } public UrlBuilder param(String param, long value) { params.put(param, value); return this; } public UrlBuilder params(Map<String, Object> p) { params.putAll(p); return this; } public String build() { StringBuilder builder = new StringBuilder(url); if (builder.length() > 0 && builder.charAt(builder.length() - 1) == '/') { builder.deleteCharAt(builder.length() - 1); } for (String path : paths) { builder.append("/").append(path); } if (!params.isEmpty()) { if (builder.indexOf("?") < 0) builder.append('?'); for (Entry<String, ?> entry : params.entrySet()) { builder.append('&'); builder.append(entry.getKey()); builder.append('='); // url.append(String.valueOf(entry.getValue())); // 不做URLEncoder处理 try { builder.append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } return builder.toString().replace("?&", "?"); } }