ソースを参照

修复无法解析中文条件问题

zhou-hao 3 年 前
コミット
e867cca1a6

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

@@ -9,6 +9,8 @@ import org.hswebframework.ezorm.core.param.Term;
 import org.hswebframework.ezorm.core.param.TermType;
 import org.hswebframework.web.api.crud.entity.QueryParamEntity;
 
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -24,12 +26,13 @@ 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);
+        try {
+            expression = URLDecoder.decode(expression, "utf-8");
+        }catch (Throwable ignore){
 
+        }
         Query<?, QueryParamEntity> conditional = QueryParamEntity.newQuery();
 
         NestConditional<?> nest = null;

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

@@ -23,6 +23,25 @@ public class TermExpressionParserTest {
         assertEquals(terms.get(1).getValue(), "test");
 
     }
+
+    @Test
+    public void testChinese() {
+        {
+            List<Term> terms = TermExpressionParser.parse("name = 我");
+
+            assertEquals(terms.get(0).getTermType(), TermType.eq);
+            assertEquals(terms.get(0).getValue(),"我");
+
+        }
+
+        {
+            List<Term> terms = TermExpressionParser.parse("name like %我%");
+
+            assertEquals(terms.get(0).getTermType(), TermType.like);
+            assertEquals(terms.get(0).getValue(),"%我%");
+
+        }
+    }
     @Test
     public void test() {
         {