import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
/**
* 功能描述:url解析与拼接
*/
public class UrlUtils {
/**
* 在给定的url后面拼接查询参数
* @param baseUrl url地址
* @param params 要拼接的查询参数map
* @return 拼接上params查询参数的新url
*/
public static String urlJoin(String baseUrl, Map<String, String> params){
if (params == null || params.isEmpty()){
return baseUrl;
}
StringBuilder sb = new StringBuilder(baseUrl);
boolean isFirst = true;
Map<String,String> spMap = urlSplit(baseUrl);
for (String key : params.keySet()){
String value = params.get(key);
if (StringUtils.isNotEmpty(key) &&StringUtils.isNotEmpty(value)){
if (isFirst && spMap.isEmpty()){
isFirst = false;
sb.append("?");
}else {
sb.append("&");
}
sb.append(key).append("=").append(value);
}
}
return sb.toString();
}
/**
* 去掉url中的路径,留下请求参数部分
* 例:https://postest.bgzchina.com/mobilePay?sysId=ZDM20210510000088857537去掉后
* sysId=ZDM20210510000088857537
* @param strURL url地址
* @return url请求参数部分
*/
private static String truncateUrlPage(String strURL){
String strAllParam=null;
String[] arrSplit=null;
strURL=strURL.trim().toLowerCase();
arrSplit=strURL.split("[?]");
if(strURL.length()>1){
if(arrSplit.length>1){
for (int i=1;i<arrSplit.length;i++){
strAllParam = arrSplit[i];
}
}
}
return strAllParam;
}
/**
* 解析出url参数中的键值对
* 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
* @param URL url地址
* @return url请求参数部分
*/
public static Map<String, String> urlSplit(String URL){
Map<String, String> mapRequest = new HashMap<>();
String[] arrSplit=null;
String strUrlParam=truncateUrlPage(URL);
if(strUrlParam==null){
return mapRequest;
}
arrSplit=strUrlParam.split("[&]");
for(String strSplit:arrSplit){
String[] arrSplitEqual=null;
arrSplitEqual= strSplit.split("[=]");
//解析出键值
if(arrSplitEqual.length>1){
//正确解析
mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);
}else{
if(arrSplitEqual[0]!=""){
//只有参数没有值,不加入
mapRequest.put(arrSplitEqual[0], "");
}
}
}
return mapRequest;
}
}
不需要做任何修改,直接拿去用就行