View Javadoc
1   package com.foxinmy.weixin4j.http.entity;
2   
3   import java.util.Iterator;
4   import java.util.List;
5   import java.util.Map;
6   import java.util.Map.Entry;
7   
8   import com.foxinmy.weixin4j.http.ContentType;
9   import com.foxinmy.weixin4j.http.URLParameter;
10  import com.foxinmy.weixin4j.util.Consts;
11  import com.foxinmy.weixin4j.util.URLEncodingUtil;
12  
13  public class FormUrlEntity extends StringEntity {
14  
15  	private static final String PARAMETER_SEPARATOR = "&";
16  
17  	public FormUrlEntity(List<URLParameter> parameters) {
18  		super(formatParameters(parameters),
19  				ContentType.APPLICATION_FORM_URLENCODED);
20  	}
21  
22  	public FormUrlEntity(Map<String, String> parameters) {
23  		super(formatParameters(parameters),
24  				ContentType.APPLICATION_FORM_URLENCODED);
25  	}
26  
27  	public static String formatParameters(List<URLParameter> parameters) {
28  		StringBuilder body = new StringBuilder();
29  		URLParameter parameter = parameters.get(0);
30  		body.append(parameter.encoding());
31  		for (int i = 1; i < parameters.size(); i++) {
32  			body.append(PARAMETER_SEPARATOR);
33  			parameter = parameters.get(i);
34  			body.append(parameter.encoding());
35  		}
36  		return body.toString();
37  	}
38  
39  	public static String formatParameters(Map<String, String> parameters) {
40  		StringBuilder body = new StringBuilder();
41  		Iterator<Entry<String, String>> it = parameters.entrySet().iterator();
42  		it.hasNext();
43  		Entry<String, String> parameter = it.next();
44  		body.append(String.format("%s=%s", URLEncodingUtil.encoding(
45  				parameter.getKey(), Consts.UTF_8, true), URLEncodingUtil
46  				.encoding(parameter.getValue(), Consts.UTF_8, true)));
47  		while (it.hasNext()) {
48  			parameter = it.next();
49  			body.append(PARAMETER_SEPARATOR).append(
50  					String.format("%s=%s", URLEncodingUtil.encoding(
51  							parameter.getKey(), Consts.UTF_8, true),
52  							URLEncodingUtil.encoding(parameter.getValue(),
53  									Consts.UTF_8, true)));
54  		}
55  		return body.toString();
56  	}
57  }