Browse Source

增加对url encode条件支持

zhouhao 3 years ago
parent
commit
1c26669430

+ 4 - 0
hsweb-commons/hsweb-commons-api/pom.xml

@@ -44,6 +44,10 @@
             <version>3.0.2</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 16 - 9
hsweb-commons/hsweb-commons-api/src/main/java/org/hswebframework/web/api/crud/entity/TermExpressionParser.java

@@ -1,5 +1,7 @@
 package org.hswebframework.web.api.crud.entity;
 
+import lombok.SneakyThrows;
+import org.apache.commons.codec.net.URLCodec;
 import org.hswebframework.ezorm.core.NestConditional;
 import org.hswebframework.ezorm.core.dsl.Query;
 import org.hswebframework.ezorm.core.param.Sort;
@@ -22,7 +24,12 @@ import java.util.stream.Stream;
  */
 public class TermExpressionParser {
 
+    static final URLCodec urlCodec = new URLCodec();
+
+    @SneakyThrows
     public static List<Term> parse(String expression) {
+        expression = urlCodec.decode(expression);
+
         Query<?, QueryParamEntity> conditional = QueryParamEntity.newQuery();
 
         NestConditional<?> nest = null;
@@ -181,15 +188,15 @@ public class TermExpressionParser {
      */
     public static List<Sort> parseOrder(String expression) {
         return Stream.of(expression.split("[,]"))
-                .map(str -> str.split("[ ]"))
-                .map(arr -> {
-                    Sort sort = new Sort();
-                    sort.setName(arr[0]);
-                    if (arr.length > 1 && "desc".equalsIgnoreCase(arr[1])) {
-                        sort.desc();
-                    }
-                    return sort;
-                }).collect(Collectors.toList());
+                     .map(str -> str.split("[ ]"))
+                     .map(arr -> {
+                         Sort sort = new Sort();
+                         sort.setName(arr[0]);
+                         if (arr.length > 1 && "desc".equalsIgnoreCase(arr[1])) {
+                             sort.desc();
+                         }
+                         return sort;
+                     }).collect(Collectors.toList());
     }
 
     private static String convertTermType(String termType) {

+ 13 - 0
hsweb-commons/hsweb-commons-api/src/test/java/org/hswebframework/web/api/crud/entity/TermExpressionParserTest.java

@@ -10,6 +10,19 @@ import static org.junit.Assert.*;
 
 public class TermExpressionParserTest {
 
+    @Test
+    public void testUrl(){
+        List<Term> terms = TermExpressionParser.parse("type=email%20and%20provider=test");
+
+        assertEquals(terms.get(0).getTermType(), TermType.eq);
+        assertEquals(terms.get(0).getColumn(), "type");
+        assertEquals(terms.get(0).getValue(), "email");
+
+        assertEquals(terms.get(1).getTermType(), TermType.eq);
+        assertEquals(terms.get(1).getColumn(), "provider");
+        assertEquals(terms.get(1).getValue(), "test");
+
+    }
     @Test
     public void test() {
         {