code: public static String packageSign(Map<String, String> params, boolean urlEncoder) {
  		// 先将参数以其参数名的字典序升序进行排序
  		TreeMap<String, String> sortedParams = new TreeMap<String, String>(params);
  		// 遍历排序后的字典，将所有参数按"key=value"格式拼接在一起
  		StringBuilder sb = new StringBuilder();
  		boolean first = true;
  		for (Entry<String, String> param : sortedParams.entrySet()) {
  			String value = param.getValue();
  			if (StrKit.isBlank(value)) {
  				continue;
  			}
  			if (first) {
  				first = false;
  			} else {
  				sb.append("&");
  			}
  			sb.append(param.getKey()).append("=");
  			if (urlEncoder) {
  				try {
  					value = urlEncode(value);
  				} catch (UnsupportedEncodingException e) {
  				}
  			}
  			sb.append(value);
  		}
  		return sb.toString();
  	}
docs: 组装签名的字段
  
  @param params
  参数
  @param urlEncoder
  是否urlEncoder
  @return {String}