Переглянути джерело

增加将url参数转为map的方法

zhou-hao 7 роки тому
батько
коміт
0217783a15

+ 16 - 0
hsweb-commons/hsweb-commons-utils/src/main/java/org/hswebframework/web/WebUtil.java

@@ -23,6 +23,8 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -48,6 +50,20 @@ public class WebUtil {
         return new HttpParameterConverter(object).convert();
     }
 
+    public static Map<String,String> queryStringToMap(String queryString,String charset){
+        try {
+            Map<String,String> map = new HashMap<>();
+
+            String[] decode = URLDecoder.decode(queryString,charset).split("&");
+            for (String keyValue : decode) {
+                String[] kv = keyValue.split("[=]",2);
+                map.put(kv[0],kv.length>1?kv[1]:"");
+            }
+            return map;
+        } catch (UnsupportedEncodingException e) {
+            throw new UnsupportedOperationException(e);
+        }
+    }
     /**
      * 尝试获取当前请求的HttpServletRequest实例
      *

+ 35 - 0
hsweb-commons/hsweb-commons-utils/src/test/java/org/hswebframework/web/WebUtilTest.java

@@ -0,0 +1,35 @@
+package org.hswebframework.web;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Map;
+
+public class WebUtilTest {
+
+    @Test
+    public void queryStringToMap() throws UnsupportedEncodingException {
+        String parameter = "key1=value1&key2=value2&key3=&key4=key5=1";
+        Map<String, String> map = WebUtil.queryStringToMap(parameter, "utf-8");
+        System.out.println(map);
+        Assert.assertEquals(map.get("key1"), "value1");
+        Assert.assertEquals(map.get("key2"), "value2");
+        Assert.assertEquals(map.get("key3"), "");
+        Assert.assertEquals(map.get("key4"), "key5=1");
+
+        parameter = "key1=%e5%80%bc1&key2=%e5%80%bc2";
+        map = WebUtil.queryStringToMap(parameter, "utf-8");
+        System.out.println(map);
+        Assert.assertEquals(map.get("key1"), "值1");
+        Assert.assertEquals(map.get("key2"), "值2");
+
+        parameter = "key1=%D6%B51&key2=%D6%B52";
+        map = WebUtil.queryStringToMap(parameter, "gbk");
+        System.out.println(map);
+        Assert.assertEquals(map.get("key1"), "值1");
+        Assert.assertEquals(map.get("key2"), "值2");
+
+    }
+
+}