Jelajahi Sumber

JSONObject取值时,如果键名为数据表的ID字段,则当值为空时默认返回-1

沈静伟 1 tahun lalu
induk
melakukan
16492ead85
1 mengubah file dengan 28 tambahan dan 5 penghapusan
  1. 28 5
      src/override/com/alibaba/fastjson/JSONObject.java

+ 28 - 5
src/override/com/alibaba/fastjson/JSONObject.java

@@ -258,12 +258,34 @@ public class JSONObject extends JSON implements Map<String, Object>, Cloneable,
     }
 
     public Long getLong(String key) throws YosException {
-        fieldContainsCheck(key, "Long");
-        Object value = get(key);
+        if (isTableUniqueColumnName(key)) {
+            return getLongValue(key, -1L);
+        } else {
+            fieldContainsCheck(key, "Long");
+            Object value = get(key);
+            return castToLong(value);
+        }
+    }
+
 
-        return castToLong(value);
+    /**
+     * 检查是否为表id字段
+     *
+     * @param key
+     * @return
+     */
+    private static boolean isTableUniqueColumnName(String key) {
+        try {
+            if (tableuniquecolumnnameList.isEmpty()) {
+                tableuniquecolumnnameList = new DBConnect().runSqlQuery("select uniquecolumnname from sys_object").toArrayList("uniquecolumnname");
+            }
+            return tableuniquecolumnnameList.contains(key);
+        } catch (Exception e) {
+            return false;
+        }
     }
 
+    private static ArrayList<String> tableuniquecolumnnameList = new ArrayList<>();
 
     public long getLongValue(String key) {
         Object value = get(key);
@@ -371,7 +393,7 @@ public class JSONObject extends JSON implements Map<String, Object>, Cloneable,
         }
         if (!Keepspecialcharacters) {
             value = value.toString().replaceAll("([';])+|(--)+", "");//去除特殊字符,防止sql注入
-        }else{
+        } else {
             value = value.toString().replace("'", "\\'");
         }
         return value.toString();
@@ -379,6 +401,7 @@ public class JSONObject extends JSON implements Map<String, Object>, Cloneable,
 
     /**
      * 验证是否为时间格式
+     *
      * @param key
      * @param pattern
      * @param defValue
@@ -406,7 +429,7 @@ public class JSONObject extends JSON implements Map<String, Object>, Cloneable,
         }
         if (!Keepspecialcharacters) {
             value = value.toString().replaceAll("([';])+|(--)+", "");//去除特殊字符,防止sql注入
-        }else{
+        } else {
             value = value.toString().replace("'", "\\'");
         }
         return value.toString();