diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/APIJSON-7.0.3.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/APIJSON-7.0.3.jar
similarity index 100%
rename from APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/APIJSON-7.0.3.jar
rename to APIJSON-Java-Server/APIJSONBoot-BigData/libs/APIJSON-7.0.3.jar
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-column-2.0.3.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-column-2.0.3.jar
new file mode 100644
index 00000000..b8d3c257
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-column-2.0.3.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-framework-7.0.3.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-framework-7.0.3.jar
new file mode 100644
index 00000000..3c3341e9
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-framework-7.0.3.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-router-2.0.3.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-router-2.0.3.jar
new file mode 100644
index 00000000..6576ef9b
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/apijson-router-2.0.3.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-jar-3.0.5.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-jar-3.0.5.jar
new file mode 100644
index 00000000..346459ce
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-jar-3.0.5.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-java-3.0.5.jar b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-java-3.0.5.jar
new file mode 100644
index 00000000..cc636d7f
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-BigData/libs/unitauto-java-3.0.5.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/pom.xml b/APIJSON-Java-Server/APIJSONBoot-BigData/pom.xml
index 8a7b0fc0..ff46cf9e 100755
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/pom.xml
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/pom.xml
@@ -5,7 +5,7 @@
apijson.boot
apijson-boot
- 7.0.3
+ 7.1.5
jar
APIJSONBoot-BigData
@@ -14,7 +14,10 @@
UTF-8
UTF-8
- 1.8
+ 17
+ UTF-8
+ 17
+ 17
@@ -36,12 +39,12 @@
com.github.TommyLemon
unitauto-java
- 2.9.0
+ 3.0.5
com.github.TommyLemon
unitauto-jar
- 2.9.0
+ 3.0.5
io.github.classgraph
@@ -55,17 +58,17 @@
com.github.Tencent
APIJSON
- 7.0.3
+ 7.1.0
com.github.APIJSON
apijson-framework
- 7.0.3
+ 7.1.5
com.github.APIJSON
apijson-column
- 2.0.3
+ 2.1.0
@@ -110,6 +113,7 @@
org.springframework.boot
spring-boot-maven-plugin
+ 3.2.5
@@ -121,9 +125,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.8.1
- 1.8
- 1.8
+ 17
+ 17
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoApplication.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoApplication.java
index 83c9e730..f2206c13 100755
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoApplication.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoApplication.java
@@ -43,9 +43,9 @@
import apijson.demo.DemoSQLConfig;
import apijson.demo.DemoSQLExecutor;
import apijson.demo.DemoVerifier;
-import apijson.framework.APIJSONApplication;
-import apijson.framework.APIJSONCreator;
-import apijson.framework.APIJSONParser;
+import apijson.framework.javax.APIJSONApplication;
+import apijson.framework.javax.APIJSONCreator;
+import apijson.framework.javax.APIJSONParser;
import apijson.orm.AbstractVerifier;
import apijson.orm.FunctionParser;
import apijson.orm.Parser;
@@ -96,7 +96,7 @@ public void customize(ConfigurableServletWebServerFactory server) {
// 支持 APIAuto 中 JavaScript 代码跨域请求
@Bean
- public WebMvcConfigurer corsConfigurer() {
+ public WebMvcConfigurer corsConfig() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
@@ -188,7 +188,7 @@ public Parser createParser() {
}
@Override
- public FunctionParser createFunctionParser() {
+ public FunctionParser createFunctionParser() {
return new DemoFunctionParser();
}
@@ -198,12 +198,12 @@ public Verifier createVerifier() {
}
@Override
- public SQLConfig createSQLConfig() {
+ public SQLConfig createSQLConfig() {
return new DemoSQLConfig();
}
@Override
- public SQLExecutor createSQLExecutor() {
+ public SQLExecutor createSQLExecutor() {
return new DemoSQLExecutor();
}
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoController.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoController.java
index e6d70aa2..590aa4d2 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoController.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/boot/DemoController.java
@@ -21,14 +21,14 @@
import static apijson.RequestMethod.HEADS;
import static apijson.RequestMethod.POST;
import static apijson.RequestMethod.PUT;
-import static apijson.framework.APIJSONConstant.ACCESS_;
-import static apijson.framework.APIJSONConstant.COUNT;
-import static apijson.framework.APIJSONConstant.FORMAT;
-import static apijson.framework.APIJSONConstant.FUNCTION_;
-import static apijson.framework.APIJSONConstant.ID;
-import static apijson.framework.APIJSONConstant.REQUEST_;
-import static apijson.framework.APIJSONConstant.USER_ID;
-import static apijson.framework.APIJSONConstant.VERSION;
+import static apijson.framework.javax.APIJSONConstant.ACCESS_;
+import static apijson.framework.javax.APIJSONConstant.COUNT;
+import static apijson.framework.javax.APIJSONConstant.FORMAT;
+import static apijson.framework.javax.APIJSONConstant.FUNCTION_;
+import static apijson.framework.javax.APIJSONConstant.ID;
+import static apijson.framework.javax.APIJSONConstant.REQUEST_;
+import static apijson.framework.javax.APIJSONConstant.USER_ID;
+import static apijson.framework.javax.APIJSONConstant.VERSION;
import static org.springframework.http.HttpHeaders.COOKIE;
import static org.springframework.http.HttpHeaders.SET_COOKIE;
@@ -49,6 +49,7 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import apijson.orm.Parser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -78,8 +79,8 @@
import apijson.demo.model.Privacy;
import apijson.demo.model.User;
import apijson.demo.model.Verify;
-import apijson.framework.APIJSONController;
-import apijson.framework.BaseModel;
+import apijson.framework.javax.APIJSONController;
+import apijson.framework.javax.BaseModel;
import apijson.orm.JSONRequest;
import apijson.orm.exception.ConditionErrorException;
import apijson.orm.exception.ConflictException;
@@ -110,13 +111,15 @@ public String getRequestURL() {
return httpServletRequest.getRequestURL().toString();
}
-
+ @Override
+ public Parser newParser(HttpSession session, RequestMethod method) {
+ return super.newParser(session, method).setNeedVerify(false);
+ }
+
// 通用接口,非事务型操作 和 简单事务型操作 都可通过这些接口自动化实现 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/**增删改查统一入口,这个一个方法可替代以下 7 个方法,牺牲一些路由解析性能来提升一点开发效率
* @param method
- * @param tag
- * @param params
* @param request
* @param session
* @return
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoFunctionParser.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoFunctionParser.java
index c2d75054..6b641ede 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoFunctionParser.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoFunctionParser.java
@@ -28,7 +28,7 @@
import apijson.NotNull;
import apijson.RequestMethod;
import apijson.StringUtil;
-import apijson.framework.APIJSONFunctionParser;
+import apijson.framework.javax.APIJSONFunctionParser;
import apijson.orm.AbstractVerifier;
import apijson.orm.JSONRequest;
import apijson.orm.Visitor;
@@ -38,7 +38,7 @@
* 具体见 https://github.com/Tencent/APIJSON/issues/101
* @author Lemon
*/
-public class DemoFunctionParser extends APIJSONFunctionParser {
+public class DemoFunctionParser extends APIJSONFunctionParser {
public static final String TAG = "DemoFunctionParser";
public DemoFunctionParser() {
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoObjectParser.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoObjectParser.java
index f177a9db..c789fc2b 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoObjectParser.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoObjectParser.java
@@ -22,7 +22,7 @@
import apijson.NotNull;
import apijson.RequestMethod;
-import apijson.framework.APIJSONObjectParser;
+import apijson.framework.javax.APIJSONObjectParser;
import apijson.orm.Join;
import apijson.orm.SQLConfig;
@@ -30,7 +30,7 @@
/**对象解析器,用来简化 Parser
* @author Lemon
*/
-public class DemoObjectParser extends APIJSONObjectParser {
+public class DemoObjectParser extends APIJSONObjectParser {
public DemoObjectParser(HttpSession session, @NotNull JSONObject request, String parentPath, SQLConfig arrayConfig
, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception {
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoParser.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoParser.java
index 08103166..9ed3491e 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoParser.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoParser.java
@@ -17,8 +17,8 @@
import com.alibaba.fastjson.JSONObject;
import apijson.RequestMethod;
-import apijson.framework.APIJSONObjectParser;
-import apijson.framework.APIJSONParser;
+import apijson.framework.javax.APIJSONObjectParser;
+import apijson.framework.javax.APIJSONParser;
import apijson.orm.SQLConfig;
@@ -46,7 +46,7 @@ public DemoParser(RequestMethod method, boolean needVerify) {
@Override
- public APIJSONObjectParser createObjectParser(JSONObject request, String parentPath, SQLConfig arrayConfig
+ public APIJSONObjectParser createObjectParser(JSONObject request, String parentPath, SQLConfig arrayConfig
, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception {
return new DemoObjectParser(getSession(), request, parentPath, arrayConfig
, isSubquery, isTable, isArrayMainTable).setMethod(getMethod()).setParser(this);
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLConfig.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLConfig.java
index 57a7eb2f..0192b96b 100755
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLConfig.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLConfig.java
@@ -14,10 +14,10 @@
package apijson.demo;
-import static apijson.framework.APIJSONConstant.ID;
-import static apijson.framework.APIJSONConstant.PRIVACY_;
-import static apijson.framework.APIJSONConstant.USER_;
-import static apijson.framework.APIJSONConstant.USER_ID;
+import static apijson.framework.javax.APIJSONConstant.ID;
+import static apijson.framework.javax.APIJSONConstant.PRIVACY_;
+import static apijson.framework.javax.APIJSONConstant.USER_;
+import static apijson.framework.javax.APIJSONConstant.USER_ID;
import java.text.SimpleDateFormat;
import java.util.Arrays;
@@ -31,7 +31,7 @@
import apijson.RequestMethod;
import apijson.StringUtil;
import apijson.column.ColumnUtil;
-import apijson.framework.APIJSONSQLConfig;
+import apijson.framework.javax.APIJSONSQLConfig;
import apijson.orm.AbstractSQLConfig;
import apijson.orm.Join;
import apijson.orm.Join.On;
@@ -309,8 +309,8 @@ protected void onJoinNotRelation(String sql, String quote, Join join, String tab
}
@Override
- protected void onJoinComplextRelation(String sql, String quote, Join j, String jt, List onList, On on) {
- // 开启 JOIN ON t1.c1 LIKE concat('%', t2.c2, '%') 等复杂关联 super.onJoinComplextRelation(sql, quote, j, jt, onList, on);
+ protected void onJoinComplexRelation(String sql, String quote, Join j, String jt, List onList, On on) {
+ // 开启 JOIN ON t1.c1 LIKE concat('%', t2.c2, '%') 等复杂关联 super.onJoinComplexRelation(sql, quote, j, jt, onList, on);
}
}
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLExecutor.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLExecutor.java
index 6119a689..1d48c5fe 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLExecutor.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoSQLExecutor.java
@@ -20,7 +20,7 @@
import apijson.Log;
import apijson.boot.DemoApplication;
-import apijson.framework.APIJSONSQLExecutor;
+import apijson.framework.javax.APIJSONSQLExecutor;
import apijson.orm.SQLConfig;
@@ -49,13 +49,13 @@ public class DemoSQLExecutor extends APIJSONSQLExecutor {
@Override
public Connection getConnection(SQLConfig config) throws Exception {
Log.d(TAG, "getConnection config.getDatasource() = " + config.getDatasource());
-
- Connection c = connectionMap.get(config.getDatabase());
+ String connectionKey = config.getDatasource() + "-" + config.getDatabase();
+ Connection c = connectionMap.get(connectionKey);
if (c == null || c.isClosed()) {
try {
DataSource ds = DemoApplication.getApplicationContext().getBean(DataSource.class);
// 另一种方式是 DruidConfig 初始化获取到 Datasource 后给静态变量 DATA_SOURCE 赋值: ds = DruidConfig.DATA_SOURCE.getConnection();
- connectionMap.put(config.getDatabase(), ds == null ? null : ds.getConnection());
+ connectionMap.put(connectionKey, ds == null ? null : ds.getConnection());
} catch (Exception e) {
Log.e(TAG, "getConnection try { "
+ "DataSource ds = DemoApplication.getApplicationContext().getBean(DataSource.class); .."
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoVerifier.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoVerifier.java
index 97b39129..1a0ee189 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoVerifier.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/DemoVerifier.java
@@ -14,7 +14,7 @@
package apijson.demo;
-import apijson.framework.APIJSONVerifier;
+import apijson.framework.javax.APIJSONVerifier;
/**安全校验器,校验请求参数、角色与权限等
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Privacy.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Privacy.java
index e8877e90..930c4ed1 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Privacy.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Privacy.java
@@ -21,7 +21,7 @@
import com.alibaba.fastjson.annotation.JSONField;
import apijson.MethodAccess;
-import apijson.framework.BaseModel;
+import apijson.framework.javax.BaseModel;
/**
* TODO 漏洞:如果GETS允许CONTACT,则CONTACT能看到自己的余额,tag可以不是Privacy-circle。
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/User.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/User.java
index 1ea89000..a535d28f 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/User.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/User.java
@@ -20,7 +20,7 @@
import java.util.List;
import apijson.MethodAccess;
-import apijson.framework.BaseModel;
+import apijson.framework.javax.BaseModel;
import apijson.orm.Visitor;
/**用户开放信息
diff --git a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Verify.java b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Verify.java
index 0da333a0..fa5fc135 100644
--- a/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Verify.java
+++ b/APIJSON-Java-Server/APIJSONBoot-BigData/src/main/java/apijson/demo/model/Verify.java
@@ -22,7 +22,7 @@
import static apijson.orm.AbstractVerifier.UNKNOWN;
import apijson.MethodAccess;
-import apijson.framework.BaseModel;
+import apijson.framework.javax.BaseModel;
/**验证码
* @author Lemon
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/APIJSON-8.0.2.jar b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/APIJSON-8.0.2.jar
new file mode 100644
index 00000000..77ad60f6
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/APIJSON-8.0.2.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-fastjson2-1.0.2.jar b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-fastjson2-1.0.2.jar
new file mode 100644
index 00000000..8abde0bb
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-fastjson2-1.0.2.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-framework-7.2.2.jar b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-framework-7.2.2.jar
new file mode 100644
index 00000000..09f8390a
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-framework-7.2.2.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-router-2.2.0.1.jar b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-router-2.2.0.1.jar
new file mode 100644
index 00000000..b84407e9
Binary files /dev/null and b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/libs/apijson-router-2.2.0.1.jar differ
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/pom.xml b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/pom.xml
index c810854c..c91b629e 100755
--- a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/pom.xml
+++ b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/pom.xml
@@ -5,7 +5,7 @@
apijson.boot
apijson-boot-multi-datasource
- 7.0.3
+ 7.2.2
jar
APIJSONBoot-MultiDataSource
@@ -23,13 +23,18 @@
+
+
+
+
+
- com.alibaba
- fastjson
- 1.2.83
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.57
-
+
jakarta.servlet
jakarta.servlet-api
@@ -59,23 +64,46 @@
com.github.Tencent
APIJSON
- 7.0.3
+ 8.0.2
com.github.APIJSON
apijson-framework
- 7.0.3
+ 7.2.2
com.github.APIJSON
- apijson-column
- 2.0.3
-
-
- com.github.APIJSON
- apijson-router
- 2.0.3
+ apijson-fastjson2
+ 1.0.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -152,7 +180,7 @@
com.mysql
mysql-connector-j
- 8.4.0
+ 9.2.0
org.postgresql
@@ -179,11 +207,6 @@
taos-jdbcdriver
2.0.38
-
-
-
-
-
org.influxdb
influxdb-java
@@ -209,6 +232,18 @@
mongodb-jdbc
2.0.3
+
+
+
+
+
+
+
+
+
+
+
+
@@ -252,6 +287,8 @@
+
+
org.yaml
snakeyaml
@@ -274,6 +311,14 @@
+
+
+
+
+
+
+
+
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java
index dd79a774..e83bbd3b 100755
--- a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java
+++ b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoApplication.java
@@ -14,11 +14,12 @@
package apijson.boot;
-import apijson.framework.APIJSONSQLConfig;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.PropertyFilter;
-
+import apijson.fastjson2.APIJSONApplication;
+import apijson.fastjson2.APIJSONCreator;
+import apijson.fastjson2.APIJSONVerifier;
+import apijson.fastjson2.APIJSONSQLConfig;
+import apijson.orm.AbstractParser;
+import apijson.orm.AbstractVerifier;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
@@ -29,8 +30,6 @@
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import java.lang.reflect.Modifier;
-import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@@ -44,21 +43,12 @@
import apijson.demo.DemoSQLConfig;
import apijson.demo.DemoSQLExecutor;
import apijson.demo.DemoVerifier;
-import apijson.framework.APIJSONApplication;
-import apijson.framework.APIJSONCreator;
-import apijson.framework.APIJSONParser;
-import apijson.orm.AbstractVerifier;
-import apijson.orm.FunctionParser;
-import apijson.orm.Parser;
-import apijson.orm.SQLConfig;
-import apijson.orm.SQLExecutor;
import apijson.orm.Verifier;
-import apijson.router.APIJSONRouterApplication;
-import unitauto.MethodUtil;
-import unitauto.MethodUtil.Argument;
-import unitauto.MethodUtil.InstanceGetter;
-import unitauto.MethodUtil.JSONCallback;
-import unitauto.jar.UnitAutoApp;
+//import unitauto.MethodUtil;
+//import unitauto.MethodUtil.Argument;
+//import unitauto.MethodUtil.InstanceGetter;
+//import unitauto.MethodUtil.JSONCallback;
+//import unitauto.jar.UnitAutoApp;
/**
@@ -91,12 +81,13 @@ public static void main(String[] args) throws Exception {
// FIXME 不要开放给项目组后端之外的任何人使用 UnitAuto(强制登录鉴权)!!!如果不需要单元测试则移除相关代码或 unitauto.Log.DEBUG = false;
// 上线生产环境前改为 false,可不输出 APIJSONORM 的日志 以及 SQLException 的原始(敏感)信息
- unitauto.Log.DEBUG = Log.DEBUG = true; // 是否开启调试模式(打印详细日志、返回详细调试信息等)
- APIJSONParser.IS_PRINT_BIG_LOG = true; // 是否打印大日志
-// APIJSONParser.IS_START_FROM_1 = true; // 分页页码是否从 1 开始,true - 从 1 开始;false - 从 0 开始
-// APIJSONSQLConfig.ENABLE_COLUMN_CONFIG = true; // apijson-framework 已集成字段插件 apijson-column,支持 !key 反选字段 和 字段名映射
+ //unitauto.Log.DEBUG = true;
+ Log.DEBUG = true; // 是否开启调试模式(打印详细日志、返回详细调试信息等)
+ AbstractParser.IS_PRINT_BIG_LOG = true; // 是否打印大日志
+ APIJSONVerifier.ENABLE_APIJSON_ROUTER = true; // apijson-framework 已集成字段插件 apijson-router,是否开启 接口路由 模式,支持简单接口转为 APIJSON JSON
+ //APIJSONParser.IS_START_FROM_1 = true; // 分页页码是否从 1 开始,true - 从 1 开始;false - 从 0 开始
+ APIJSONSQLConfig.ENABLE_COLUMN_CONFIG = false; // apijson-framework 已集成字段插件 apijson-column,支持 !key 反选字段 和 字段名映射
APIJSONApplication.init();
- APIJSONRouterApplication.init();
System.out.println("\n\n<<<<<<<<< 本 Demo 在 resources/static 内置了 APIAuto,Chrome/Firefox 打开 http://localhost:8080 即可调试(端口号根据项目配置而定) ^_^ >>>>>>>>>\n");
}
@@ -204,6 +195,16 @@ public void addCorsMappings(CorsRegistry registry) {
Log.e(TAG, "加载 IoTDB 驱动失败,请检查 pom.xml 中 org.apache.iotdb.jdbc 版本是否存在以及可用 !!!");
}
+ try { //加载驱动程序
+ Log.d(TAG, "尝试加载 DuckDB 驱动 <<<<<<<<<<<<<<<<<<<<< ");
+ Class.forName("org.duckdb.DuckDBDriver");
+ Log.d(TAG, "成功加载 DuckDB 驱动!>>>>>>>>>>>>>>>>>>>>> ");
+ }
+ catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ Log.e(TAG, "加载 DuckDB 驱动失败,请检查 pom.xml 中 org.duckdb 版本是否存在以及可用 !!!");
+ }
+
// try { //加载驱动程序
// Log.d(TAG, "尝试加载 TDengine 驱动 <<<<<<<<<<<<<<<<<<<<< ");
// Class.forName("com.taosdata.jdbc.TSDBDriver");
@@ -212,15 +213,15 @@ public void addCorsMappings(CorsRegistry registry) {
// e.printStackTrace();
// Log.e(TAG, "加载 TDengine 驱动失败,请检查 pom.xml 中 com.taosdata.jdbc 版本是否存在以及可用 !!!");
// }
- //
- // try { //加载驱动程序
- // Log.d(TAG, "尝试加载 NebulaGraph 驱动 <<<<<<<<<<<<<<<<<<<<< ");
- // Class.forName("com.vesoft.nebula.jdbc.impl.NebulaDriver");
- // Log.d(TAG, "成功加载 NebulaGraph 驱动!>>>>>>>>>>>>>>>>>>>>> ");
- // } catch (ClassNotFoundException e) {
- // e.printStackTrace();
- // Log.e(TAG, "加载 NebulaGraph 驱动失败,请检查 pom.xml 中 org.nebula-contrib 版本是否存在以及可用 !!!");
- // }
+
+ // try { //加载驱动程序
+ // Log.d(TAG, "尝试加载 openGauss 驱动 <<<<<<<<<<<<<<<<<<<<< ");
+ // Class.forName("org.opengauss.Driver");
+ // Log.d(TAG, "成功加载 openGauss 驱动!>>>>>>>>>>>>>>>>>>>>> ");
+ // } catch (ClassNotFoundException e) {
+ // e.printStackTrace();
+ // Log.e(TAG, "加载 openGauss 驱动失败,请检查 pom.xml 中 org.opengauss 版本是否存在以及可用 !!!");
+ // }
// APIJSON 配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
@@ -233,27 +234,27 @@ public void addCorsMappings(CorsRegistry registry) {
APIJSONApplication.DEFAULT_APIJSON_CREATOR = new APIJSONCreator() {
@Override
- public Parser createParser() {
+ public DemoParser createParser() {
return new DemoParser();
}
@Override
- public FunctionParser createFunctionParser() {
+ public DemoFunctionParser createFunctionParser() {
return new DemoFunctionParser();
}
@Override
- public Verifier createVerifier() {
+ public DemoVerifier createVerifier() {
return new DemoVerifier();
}
@Override
- public SQLConfig createSQLConfig() {
+ public DemoSQLConfig createSQLConfig() {
return new DemoSQLConfig();
}
@Override
- public SQLExecutor createSQLExecutor() {
+ public DemoSQLExecutor createSQLExecutor() {
return new DemoSQLExecutor();
}
@@ -264,96 +265,96 @@ public SQLExecutor createSQLExecutor() {
// UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto <<<<<<<<<<<<<<<<<<<<<<<<<<<
// FIXME 不要开放给项目组后端之外的任何人使用 UnitAuto(强制登录鉴权)!!!如果不需要单元测试则移除相关代码或 unitauto.Log.DEBUG = false;
- UnitAutoApp.init();
+ //UnitAutoApp.init();
// 适配 Spring 注入的类及 Context 等环境相关的类
- final InstanceGetter ig = MethodUtil.INSTANCE_GETTER;
- MethodUtil.INSTANCE_GETTER = new InstanceGetter() {
-
- @Override
- public Object getInstance(@NotNull Class> clazz, List classArgs, Boolean reuse) throws Exception {
- if (APPLICATION_CONTEXT != null && ApplicationContext.class.isAssignableFrom(clazz) && clazz.isAssignableFrom(APPLICATION_CONTEXT.getClass())) {
- return APPLICATION_CONTEXT;
- }
-
- if (reuse != null && reuse && (classArgs == null || classArgs.isEmpty())) {
- return APPLICATION_CONTEXT.getBean(clazz);
- }
-
- return ig.getInstance(clazz, classArgs, reuse);
- }
- };
-
- // 排除转换 JSON 异常的类,一般是 Context 等环境相关的类
- final JSONCallback jc = MethodUtil.JSON_CALLBACK;
- MethodUtil.JSON_CALLBACK = new JSONCallback() {
-
- @Override
- public JSONObject newSuccessResult() {
- return jc.newSuccessResult();
- }
-
- @Override
- public JSONObject newErrorResult(Throwable e) {
- return jc.newErrorResult(e);
- }
-
- @Override
- public JSONObject parseJSON(String type, Object value) {
- if (value == null || unitauto.JSON.isBooleanOrNumberOrString(value) || value instanceof JSON || value instanceof Enum) {
- return jc.parseJSON(type, value);
- }
-
- if (value instanceof ApplicationContext
- || value instanceof Context
- || value instanceof org.apache.catalina.Context
- // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context
- ) {
- value = value.toString();
- } else {
- try {
- value = JSON.parse(JSON.toJSONString(value, new PropertyFilter() {
- @Override
- public boolean apply(Object object, String name, Object value) {
- if (value == null) {
- return true;
- }
-
- if (value instanceof ApplicationContext
- || value instanceof Context
- || value instanceof org.apache.catalina.Context
- // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context
- ) {
- return false;
- }
-
- // 防止通过 UnitAuto 远程执行 getDBPassword 等方法来查到敏感信息,但如果直接调用 public String getDBUri 这里没法拦截,仍然会返回敏感信息
- // if (object instanceof SQLConfig) {
- // // 这个类部分方法不序列化返回
- // if ("dBUri".equalsIgnoreCase(name) || "dBPassword".equalsIgnoreCase(name) || "dBAccount".equalsIgnoreCase(name)) {
- // return false;
- // }
- // return false; // 这个类所有方法都不序列化返回
- // }
-
- // 所有类中的方法只要包含关键词就不序列化返回
- String n = StringUtil.toLowerCase(name);
- if (n.contains("database") || n.contains("schema") || n.contains("dburi") || n.contains("password") || n.contains("account")) {
- return false;
- }
-
- return Modifier.isPublic(value.getClass().getModifiers());
- }
- }));
- } catch (Exception e) {
- Log.e(TAG, "toJSONString catch \n" + e.getMessage());
- }
- }
-
- return jc.parseJSON(type, value);
- }
-
- };
+ //final InstanceGetter ig = MethodUtil.INSTANCE_GETTER;
+ //MethodUtil.INSTANCE_GETTER = new InstanceGetter() {
+ //
+ // @Override
+ // public Object getInstance(@NotNull Class> clazz, List classArgs, Boolean reuse) throws Exception {
+ // if (APPLICATION_CONTEXT != null && ApplicationContext.class.isAssignableFrom(clazz) && clazz.isAssignableFrom(APPLICATION_CONTEXT.getClass())) {
+ // return APPLICATION_CONTEXT;
+ // }
+ //
+ // if (reuse != null && reuse && (classArgs == null || classArgs.isEmpty())) {
+ // return APPLICATION_CONTEXT.getBean(clazz);
+ // }
+ //
+ // return ig.getInstance(clazz, classArgs, reuse);
+ // }
+ //};
+ //
+ //// 排除转换 JSON 异常的类,一般是 Context 等环境相关的类
+ //final JSONCallback jc = MethodUtil.JSON_CALLBACK;
+ //MethodUtil.JSON_CALLBACK = new JSONCallback() {
+ //
+ // @Override
+ // public JSONObject newSuccessResult() {
+ // return jc.newSuccessResult();
+ // }
+ //
+ // @Override
+ // public JSONObject newErrorResult(Throwable e) {
+ // return jc.newErrorResult(e);
+ // }
+ //
+ // @Override
+ // public JSONObject parseJSON(String type, Object value) {
+ // if (value == null || unitauto.JSON.isBooleanOrNumberOrString(value) || value instanceof JSON || value instanceof Enum) {
+ // return jc.parseJSON(type, value);
+ // }
+ //
+ // if (value instanceof ApplicationContext
+ // || value instanceof Context
+ // || value instanceof org.apache.catalina.Context
+ // // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context
+ // ) {
+ // value = value.toString();
+ // } else {
+ // try {
+ // value = parseJSON(JSON.toJSONString(value, new PropertyFilter() {
+ // @Override
+ // public boolean apply(Object object, String name, Object value) {
+ // if (value == null) {
+ // return true;
+ // }
+ //
+ // if (value instanceof ApplicationContext
+ // || value instanceof Context
+ // || value instanceof org.apache.catalina.Context
+ // // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context
+ // ) {
+ // return false;
+ // }
+ //
+ // // 防止通过 UnitAuto 远程执行 getDBPassword 等方法来查到敏感信息,但如果直接调用 public String getDBUri 这里没法拦截,仍然会返回敏感信息
+ // // if (object instanceof SQLConfig) {
+ // // // 这个类部分方法不序列化返回
+ // // if ("dBUri".equalsIgnoreCase(name) || "dBPassword".equalsIgnoreCase(name) || "dBAccount".equalsIgnoreCase(name)) {
+ // // return false;
+ // // }
+ // // return false; // 这个类所有方法都不序列化返回
+ // // }
+ //
+ // // 所有类中的方法只要包含关键词就不序列化返回
+ // String n = StringUtil.toLowerCase(name);
+ // if (n.contains("database") || n.contains("schema") || n.contains("dburi") || n.contains("password") || n.contains("account")) {
+ // return false;
+ // }
+ //
+ // return Modifier.isPublic(value.getClass().getModifiers());
+ // }
+ // }));
+ // } catch (Exception e) {
+ // Log.e(TAG, "toJSONString catch \n" + e.getMessage());
+ // }
+ // }
+ //
+ // return jc.parseJSON(type, value);
+ // }
+ //
+ //};
// UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoController.java b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoController.java
index 1063fe74..19455c2d 100644
--- a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoController.java
+++ b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/DemoController.java
@@ -14,44 +14,22 @@
package apijson.boot;
-import apijson.orm.AbstractParser;
-import apijson.orm.Parser;
+import apijson.fastjson2.APIJSONController;
+import apijson.fastjson2.APIJSONParser;
+import apijson.fastjson2.JSONRequest;
import apijson.orm.exception.*;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.util.LRUMap;
-//import com.vesoft.nebula.Date;
-//import com.vesoft.nebula.DateTime;
-//import com.vesoft.nebula.Duration;
-//import com.vesoft.nebula.Edge;
-//import com.vesoft.nebula.NullType;
-//import com.vesoft.nebula.Tag;
-//import com.vesoft.nebula.Time;
-//import com.vesoft.nebula.Value;
-//import com.vesoft.nebula.Vertex;
-//import com.vesoft.nebula.client.graph.data.DateTimeWrapper;
-//import com.vesoft.nebula.client.graph.data.DateWrapper;
-//import com.vesoft.nebula.client.graph.data.DurationWrapper;
-//import com.vesoft.nebula.client.graph.data.TimeWrapper;
-//import com.vesoft.nebula.client.graph.data.ValueWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestClientResponseException;
import org.springframework.web.client.RestTemplate;
-import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URLDecoder;
import java.net.URLEncoder;
@@ -68,8 +46,8 @@
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
-import apijson.JSON;
-import apijson.JSONResponse;
+import apijson.fastjson2.JSON;
+import apijson.fastjson2.JSONResponse;
import apijson.Log;
import apijson.RequestMethod;
import apijson.StringUtil;
@@ -82,12 +60,9 @@
import apijson.demo.model.User;
import apijson.demo.model.Verify;
import apijson.framework.BaseModel;
-import apijson.orm.JSONRequest;
-import apijson.orm.model.TestRecord;
-import apijson.router.APIJSONRouterController;
-import org.springframework.web.servlet.ModelAndView;
import unitauto.MethodUtil;
+import static apijson.JSON.getString;
import static apijson.RequestMethod.DELETE;
import static apijson.RequestMethod.GET;
import static apijson.RequestMethod.GETS;
@@ -101,14 +76,13 @@
import static apijson.framework.APIJSONConstant.FUNCTION_;
import static apijson.framework.APIJSONConstant.ID;
import static apijson.framework.APIJSONConstant.REQUEST_;
-import static apijson.framework.APIJSONConstant.TEST_RECORD_;
import static apijson.framework.APIJSONConstant.USER_ID;
import static apijson.framework.APIJSONConstant.VERSION;
import static org.springframework.http.HttpHeaders.COOKIE;
import static org.springframework.http.HttpHeaders.SET_COOKIE;
-/**请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
+/**请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
* 具体见 SpringBoot 文档
* https://www.springcloud.cc/spring-boot.html#boot-features-spring-mvc
* 以及 APIJSON 通用文档 3.设计规范 3.1 操作方法
@@ -122,7 +96,7 @@
@Service
@RestController
@RequestMapping("")
-public class DemoController extends APIJSONRouterController { // APIJSONController {
+public class DemoController extends APIJSONController {
private static final String TAG = "DemoController";
public String getRequestBaseURL() {
@@ -155,10 +129,11 @@ public String getRequestURL() {
return getRequestBaseURL() + getRequestPath();
}
-// @Override
-// public Parser newParser(HttpSession session, RequestMethod method) {
-// return super.newParser(session, method).setNeedVerify(false);
-// }
+ @Override
+ public APIJSONParser newParser(HttpSession session, RequestMethod method) {
+ return super.newParser(session, method); // .setNeedVerify(false);
+ }
+
/**增删改查统一的类 RESTful API 入口,牺牲一点路由解析性能来提升一些开发效率
* @param method
@@ -186,7 +161,7 @@ public String router(@PathVariable("method") String method, @PathVariable("tag")
@PostMapping(value = "crud") // 直接 {method} 或 apijson/{method} 会和内置网页的路由有冲突
// @Override
public String crudAll(@RequestBody String request, HttpSession session) {
- return newParser(session, RequestMethod.CRUD).parse(request);
+ return super.crudAll(request, session);
}
/**增删改查统一入口,这个一个方法可替代以下 7 个方法,牺牲一点路由解析性能来提升一些开发效率
* @param method
@@ -404,7 +379,7 @@ public String openGet(@PathVariable("request") String request, HttpSession sessi
try {
request = URLDecoder.decode(request, StringUtil.UTF_8);
} catch (Exception e) {
- // Parser 会报错
+ // Parser 会报错
}
if (! Log.DEBUG) { // 一般情况这样简单使用
@@ -416,7 +391,7 @@ public String openGet(@PathVariable("request") String request, HttpSession sessi
try {
String url = getRequestURL();
- String query = StringUtil.getTrimedString(httpServletRequest.getQueryString());
+ String query = StringUtil.trim(httpServletRequest.getQueryString());
if (StringUtil.isNotEmpty(query)) {
try {
query = "?" + URLEncoder.encode(query, StringUtil.UTF_8);
@@ -562,16 +537,16 @@ public JSONObject reload(@RequestBody String request) {
phone = requestObject.getString(PHONE);
verify = requestObject.getString(VERIFY);
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
JSONResponse response = new JSONResponse(headVerify(Verify.TYPE_RELOAD, phone, verify));
response = response.getJSONResponse(VERIFY_);
if (JSONResponse.isExist(response) == false) {
- return DemoParser.extendErrorResult(requestObject, new ConditionErrorException("手机号或验证码错误"));
+ return extendErrorResult(requestObject, new ConditionErrorException("手机号或验证码错误"));
}
- JSONObject result = DemoParser.newSuccessResult();
+ JSONObject result = newSuccessResult();
boolean reloadAll = StringUtil.isEmpty(type, true) || "ALL".equals(type);
@@ -580,7 +555,7 @@ public JSONObject reload(@RequestBody String request) {
result.put(ACCESS_, DemoVerifier.initAccess(false, null, value));
} catch (ServerException e) {
e.printStackTrace();
- result.put(ACCESS_, DemoParser.newErrorResult(e));
+ result.put(ACCESS_, newErrorResult(e));
}
}
@@ -589,7 +564,7 @@ public JSONObject reload(@RequestBody String request) {
result.put(FUNCTION_, DemoFunctionParser.init(false, null, value));
} catch (ServerException e) {
e.printStackTrace();
- result.put(FUNCTION_, DemoParser.newErrorResult(e));
+ result.put(FUNCTION_, newErrorResult(e));
}
}
@@ -598,7 +573,7 @@ public JSONObject reload(@RequestBody String request) {
result.put(REQUEST_, DemoVerifier.initRequest(false, null, value));
} catch (ServerException e) {
e.printStackTrace();
- result.put(REQUEST_, DemoParser.newErrorResult(e));
+ result.put(REQUEST_, newErrorResult(e));
}
}
@@ -625,10 +600,10 @@ public JSONObject postVerify(@RequestBody String request) {
type = requestObject.getIntValue(TYPE);
phone = requestObject.getString(PHONE);
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
- new DemoParser(DELETE, false).parse(newVerifyRequest(type, phone, null));
+ new DemoParser(DELETE, false).parse(newVerifyRequest(type, phone));
JSONObject response = new DemoParser(POST, false).parseResponse(
newVerifyRequest(type, phone, "" + (new Random().nextInt(9999) + 1000))
@@ -636,7 +611,7 @@ public JSONObject postVerify(@RequestBody String request) {
if (JSONResponse.isSuccess(response) == false) {
- new DemoParser(DELETE, false).parseResponse(new JSONRequest(new Verify(type, phone)));
+ new DemoParser(DELETE, false).parseResponse(newVerifyRequest(type, phone));
return response;
}
@@ -667,9 +642,9 @@ public JSONObject getVerify(@RequestBody String request) {
type = requestObject.getIntValue(TYPE);
phone = requestObject.getString(PHONE);
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
- return new DemoParser(GETS, false).parseResponse(newVerifyRequest(type, phone, null));
+ return new DemoParser(GETS, false).parseResponse(newVerifyRequest(type, phone));
}
/**校验验证码
@@ -695,7 +670,7 @@ public JSONObject headVerify(@RequestBody String request) {
phone = requestObject.getString(PHONE);
verify = requestObject.getString(VERIFY);
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
return headVerify(type, phone, verify);
}
@@ -710,15 +685,12 @@ public JSONObject headVerify(@RequestBody String request) {
public JSONObject headVerify(int type, String phone, String code) {
JSONResponse response = new JSONResponse(
new DemoParser(GETS, false).parseResponse(
- new JSONRequest(
- new Verify(type, phone)
- .setVerify(code)
- ).setTag(VERIFY_)
+ newVerifyRequest(type, phone, code)
)
);
Verify verify = response.getObject(Verify.class);
if (verify == null) {
- return DemoParser.newErrorResult(StringUtil.isEmpty(code, true)
+ return newErrorResult(StringUtil.isEmpty(code, true)
? new NotExistException("验证码不存在!") : new ConditionErrorException("手机号或验证码错误!"));
}
@@ -727,27 +699,36 @@ public JSONObject headVerify(int type, String phone, String code) {
long now = System.currentTimeMillis();
if (now > 60*1000 + time) {
new DemoParser(DELETE, false).parseResponse(
- new JSONRequest(new Verify(type, phone)).setTag(VERIFY_)
+ newVerifyRequest(type, phone)
);
- return DemoParser.newErrorResult(new TimeoutException("验证码已过期!"));
+ return newErrorResult(new TimeoutException("验证码已过期!"));
}
- return new JSONResponse(
- new DemoParser(HEADS, false).parseResponse(
- new JSONRequest(new Verify(type, phone).setVerify(code)).setFormat(true)
- )
+ return new DemoParser(HEADS, false).parseResponse(
+ newVerifyRequest(type, phone, code)
);
}
/**新建一个验证码请求
+ * @param phone
+ * @param phone
+ * @return
+ */
+ public static JSONObject newVerifyRequest(int type, String phone) {
+ return newVerifyRequest(type, phone, null);
+ }
+ /**新建一个验证码请求
+ * @param type
* @param phone
* @param verify
* @return
*/
- private apijson.JSONRequest newVerifyRequest(int type, String phone, String verify) {
- return new JSONRequest(new Verify(type, phone).setVerify(verify)).setTag(VERIFY_).setFormat(true);
+ public static JSONObject newVerifyRequest(int type, String phone, String verify) {
+ return new JSONRequest(
+ new Verify(type, phone).setVerify(verify)
+ ).setTag(VERIFY_).setFormat(true);
}
@@ -771,7 +752,7 @@ private apijson.JSONRequest newVerifyRequest(int type, String phone, String veri
}
*
*/
- @PostMapping(LOGIN) //TODO 改 SQLConfig 里的 dbAccount, dbPassword,直接用数据库鉴权
+ @PostMapping(LOGIN) //TODO 改 SQLConfig 里的 dbAccount, dbPassword,直接用数据库鉴权
public JSONObject login(@RequestBody String request, HttpSession session) {
JSONObject requestObject = null;
boolean isPassword;
@@ -813,22 +794,20 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
requestObject.remove(REMEMBER);
requestObject.remove(DEFAULTS);
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
//手机号是否已注册
JSONObject phoneResponse = new DemoParser(HEADS, false).parseResponse(
- new JSONRequest(
- new Privacy().setPhone(phone)
- )
+ new JSONRequest(new Privacy().setPhone(phone))
);
if (JSONResponse.isSuccess(phoneResponse) == false) {
- return DemoParser.newResult(phoneResponse.getIntValue(JSONResponse.KEY_CODE), phoneResponse.getString(JSONResponse.KEY_MSG));
+ return newResult(phoneResponse.getIntValue(JSONResponse.KEY_CODE), getString(phoneResponse, JSONResponse.KEY_MSG));
}
JSONResponse response = new JSONResponse(phoneResponse).getJSONResponse(PRIVACY_);
if(JSONResponse.isExist(response) == false) {
- return DemoParser.newErrorResult(new NotExistException("手机号未注册"));
+ return newErrorResult(new NotExistException("手机号未注册"));
}
//根据phone获取User
@@ -856,26 +835,25 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
response = new JSONResponse(headVerify(Verify.TYPE_LOGIN, phone, password));
}
if (JSONResponse.isSuccess(response) == false) {
- return response;
+ return response.toObject(JSONObject.class);
}
response = response.getJSONResponse(isPassword ? PRIVACY_ : VERIFY_);
if (JSONResponse.isExist(response) == false) {
- return DemoParser.newErrorResult(new ConditionErrorException("账号或密码错误"));
+ return newErrorResult(new ConditionErrorException("账号或密码错误"));
}
response = new JSONResponse(
new DemoParser(GETS, false).parseResponse(
- new JSONRequest( // 兼容 MySQL 5.6 及以下等不支持 json 类型的数据库
- USER_, // User 里在 setContactIdList(List) 后加 setContactIdList(String) 没用
- new apijson.JSONObject( // fastjson 查到一个就不继续了,所以只能加到前面或者只有这一个,但这样反过来不兼容 5.7+
- new User(userId) // 所以就用 @json 来强制转为 JSONArray,保证有效
- ).setJson("contactIdList,pictureList")
- ).setFormat(true)
+ new JSONRequest( // 兼容 MySQL 5.6 及以下等不支持 json 类型的数据库
+ USER_, // User 里在 setContactIdList(List) 后加 setContactIdList(String) 没用
+ JSONRequest.setJson(JSON.parseObject(new User(userId)),"contactIdList,pictureList")
+ )
+ .setFormat(true)
)
);
User user = response.getObject(User.class);
if (user == null || BaseModel.value(user.getId()) != userId) {
- return DemoParser.newErrorResult(new NullPointerException("服务器内部错误"));
+ return newErrorResult(new NullPointerException("服务器内部错误"));
}
//登录状态保存至session
@@ -900,7 +878,9 @@ public JSONObject login(@RequestBody String request, HttpSession session) {
@PostMapping("logout")
@Override
public JSONObject logout(HttpSession session) {
- SESSION_MAP.remove(session.getId());
+ if (session != null) {
+ SESSION_MAP.remove(session.getId());
+ }
Long userId;
try {
@@ -908,11 +888,11 @@ public JSONObject logout(HttpSession session) {
Log.d(TAG, "logout userId = " + userId + "; session.getId() = " + (session == null ? null : session.getId()));
super.logout(session);
} catch (Exception e) {
- return DemoParser.newErrorResult(e);
+ return newErrorResult(e);
}
- JSONObject result = DemoParser.newSuccessResult();
- JSONObject user = DemoParser.newSuccessResult();
+ JSONObject result = newSuccessResult();
+ JSONObject user = newSuccessResult();
user.put(ID, userId);
user.put(COUNT, 1);
result.put(StringUtil.firstCase(USER_), user);
@@ -952,7 +932,7 @@ public JSONObject register(@RequestBody String request) {
requestObject = DemoParser.parseRequest(request);
privacyObj = requestObject.getJSONObject(PRIVACY_);
- phone = StringUtil.getString(privacyObj.getString(PHONE));
+ phone = StringUtil.get(privacyObj.getString(PHONE));
verify = requestObject.getString(VERIFY);
password = privacyObj.getString(_PASSWORD);
@@ -966,7 +946,7 @@ public JSONObject register(@RequestBody String request) {
return newIllegalArgumentResult(requestObject, VERIFY);
}
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
@@ -976,11 +956,9 @@ public JSONObject register(@RequestBody String request) {
}
//手机号或验证码错误
if (JSONResponse.isExist(response.getJSONResponse(VERIFY_)) == false) {
- return DemoParser.extendErrorResult(response, new ConditionErrorException("手机号或验证码错误!"));
+ return extendErrorResult(response, new ConditionErrorException("手机号或验证码错误!"));
}
-
-
//生成User和Privacy
if (StringUtil.isEmpty(requestObject.getString(JSONRequest.KEY_TAG), true)) {
requestObject.put(JSONRequest.KEY_TAG, REGISTER);
@@ -1028,8 +1006,8 @@ public static JSONObject newIllegalArgumentResult(JSONObject requestObject, Stri
* @return
*/
public static JSONObject newIllegalArgumentResult(JSONObject requestObject, String key, String msg) {
- return DemoParser.extendErrorResult(requestObject
- , new IllegalArgumentException(key + ":value 中value不合法!" + StringUtil.getString(msg)));
+ return new DemoParser().extendErrorResult(requestObject
+ , new IllegalArgumentException(key + ":value 中value不合法!" + StringUtil.get(msg)));
}
@@ -1070,8 +1048,8 @@ public JSONObject putPassword(@RequestBody String request){
String password;
try {
requestObject = DemoParser.parseRequest(request);
- oldPassword = StringUtil.getString(requestObject.getString(OLD_PASSWORD));
- verify = StringUtil.getString(requestObject.getString(VERIFY));
+ oldPassword = StringUtil.get(requestObject.getString(OLD_PASSWORD));
+ verify = StringUtil.get(requestObject.getString(VERIFY));
requestObject.remove(OLD_PASSWORD);
requestObject.remove(VERIFY);
@@ -1096,16 +1074,16 @@ public JSONObject putPassword(@RequestBody String request){
}
}
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
if (StringUtil.isPassword(oldPassword)) {
if (userId <= 0) { //手机号+验证码不需要userId
- return DemoParser.extendErrorResult(requestObject, new IllegalArgumentException(ID + ":value 中value不合法!"));
+ return extendErrorResult(requestObject, new IllegalArgumentException(ID + ":value 中value不合法!"));
}
if (oldPassword.equals(password)) {
- return DemoParser.extendErrorResult(requestObject, new ConflictException("新旧密码不能一样!"));
+ return extendErrorResult(requestObject, new ConflictException("新旧密码不能一样!"));
}
//验证旧密码
@@ -1121,7 +1099,7 @@ public JSONObject putPassword(@RequestBody String request){
)
);
if (JSONResponse.isExist(response.getJSONResponse(PRIVACY_)) == false) {
- return DemoParser.extendErrorResult(requestObject, new ConditionErrorException("账号或原密码错误,请重新输入!"));
+ return extendErrorResult(requestObject, new ConditionErrorException("账号或原密码错误,请重新输入!"));
}
}
else if (StringUtil.isPhone(phone) && StringUtil.isVerify(verify)) {
@@ -1130,7 +1108,7 @@ else if (StringUtil.isPhone(phone) && StringUtil.isVerify(verify)) {
return response;
}
if (JSONResponse.isExist(response.getJSONResponse(VERIFY_)) == false) {
- return DemoParser.extendErrorResult(response, new ConditionErrorException("手机号或验证码错误!"));
+ return extendErrorResult(response, new ConditionErrorException("手机号或验证码错误!"));
}
response = new JSONResponse(
new DemoParser(GET, false).parseResponse(
@@ -1146,7 +1124,7 @@ else if (StringUtil.isPhone(phone) && StringUtil.isVerify(verify)) {
requestObject.put(PRIVACY_, privacyObj);
} else {
- return DemoParser.extendErrorResult(requestObject, new IllegalArgumentException("请输入合法的 旧密码 或 手机号+验证码 !"));
+ return extendErrorResult(requestObject, new IllegalArgumentException("请输入合法的 旧密码 或 手机号+验证码 !"));
}
//TODO 上线版加上 password = MD5Util.MD5(password);
@@ -1200,7 +1178,7 @@ public JSONObject putBalance(@RequestBody String request, HttpSession session) {
throw new IllegalArgumentException(PRIVACY_ + "." + _PAY_PASSWORD + ":value 中value不合法!");
}
} catch (Exception e) {
- return DemoParser.extendErrorResult(requestObject, e);
+ return extendErrorResult(requestObject, e);
}
//验证密码<<<<<<<<<<<<<<<<<<<<<<<
@@ -1213,7 +1191,7 @@ public JSONObject putBalance(@RequestBody String request, HttpSession session) {
);
response = response.getJSONResponse(PRIVACY_);
if (JSONResponse.isExist(response) == false) {
- return DemoParser.extendErrorResult(requestObject, new ConditionErrorException("支付密码错误!"));
+ return extendErrorResult(requestObject, new ConditionErrorException("支付密码错误!"));
}
//验证密码>>>>>>>>>>>>>>>>>>>>>>>>
@@ -1222,10 +1200,10 @@ public JSONObject putBalance(@RequestBody String request, HttpSession session) {
//验证金额范围<<<<<<<<<<<<<<<<<<<<<<<
if (change == 0) {
- return DemoParser.extendErrorResult(requestObject, new OutOfRangeException("balance+的值不能为0!"));
+ return extendErrorResult(requestObject, new OutOfRangeException("balance+的值不能为0!"));
}
if (Math.abs(change) > 10000) {
- return DemoParser.extendErrorResult(requestObject, new OutOfRangeException("单次 充值/提现 的金额不能超过10000元!"));
+ return extendErrorResult(requestObject, new OutOfRangeException("单次 充值/提现 的金额不能超过10000元!"));
}
//验证金额范围>>>>>>>>>>>>>>>>>>>>>>>>
@@ -1233,19 +1211,17 @@ public JSONObject putBalance(@RequestBody String request, HttpSession session) {
if (change < 0) {//提现
response = new JSONResponse(
new DemoParser(GETS, false).parseResponse(
- new JSONRequest(
- new Privacy(userId)
- )
+ new JSONRequest(new Privacy(userId))
)
);
- Privacy privacy = response == null ? null : response.getObject(Privacy.class);
+ Privacy privacy = response.getObject(Privacy.class);
long id = privacy == null ? 0 : BaseModel.value(privacy.getId());
if (id != userId) {
- return DemoParser.extendErrorResult(requestObject, new Exception("服务器内部错误!"));
+ return extendErrorResult(requestObject, new Exception("服务器内部错误!"));
}
if (BaseModel.value(privacy.getBalance()) < -change) {
- return DemoParser.extendErrorResult(requestObject, new OutOfRangeException("余额不足!"));
+ return extendErrorResult(requestObject, new OutOfRangeException("余额不足!"));
}
}
@@ -1323,7 +1299,7 @@ public String delegate(
HttpMethod method, HttpSession session
) {
if (Log.DEBUG == false) {
- return DemoParser.newErrorResult(new IllegalAccessException("非 DEBUG 模式下不允许使用服务器代理!")).toJSONString();
+ return JSON.toJSONString(newErrorResult(new IllegalAccessException("非 DEBUG 模式下不允许使用服务器代理!")));
}
int recordType = record != null ? record : (REQUEST_RECORD_TYPE != null ? REQUEST_RECORD_TYPE : 0);
@@ -1342,7 +1318,7 @@ public String delegate(
JSONObject obj = JSON.parseObject(body);
if (obj == null) {
- obj = new JSONObject(true);
+ obj = JSON.newJSONObject();
}
if (obj.get("endpoint") == null) {
endpoint = index < 0 ? endpoint : endpoint.substring(0, index);
@@ -1443,10 +1419,10 @@ else if (body != null && "DATA".equals(type)) { // if (StringUtil.isNotEmpty(bod
hm.put(name, h);
try {
- com.alibaba.fastjson.JSON.parse(h);
+ JSON.parse(h);
} catch (Throwable e) {
Log.e(TAG, "delegate try {\n" +
- " JSON.parse(h);\n" +
+ " parseJSON(h);\n" +
" } catch (Throwable e) = " + e.getMessage());
hs += "\n" + name + ": " + "\"" + h.replaceAll("\"", "\\\"") + "\"";
continue;
@@ -1485,11 +1461,11 @@ else if (names != null) {
hm.put(name, h);
try {
- com.alibaba.fastjson.JSON.parse(h);
+ JSON.parse(h);
}
catch (Throwable e) {
Log.e(TAG, "delegate try {\n" +
- " JSON.parse(h);\n" +
+ " parseJSON(h);\n" +
" } catch (Throwable e) = " + e.getMessage());
hs += "\n" + name + ": " + "\"" + h.replaceAll("\"", "\\\"") + "\"";
continue;
@@ -1556,7 +1532,7 @@ else if (names != null) {
for (Entry e : set) {
if (e != null) {
String[] vals = e.getValue();
- url += ((first ? "" : "&") + e.getKey() + "=" + ( vals == null || vals.length <= 0 ? "" : StringUtil.getString(vals[0]) ));
+ url += ((first ? "" : "&") + e.getKey() + "=" + ( vals == null || vals.length <= 0 ? "" : StringUtil.get(vals[0]) ));
first = false;
}
}
@@ -1591,12 +1567,12 @@ else if (names != null) {
: (MediaType.MULTIPART_FORM_DATA.equals(contentType) ? "DATA" : "JSON"))) // FIXME 考虑 XML, PNG 等格式?
) : "JSON";
- String sql = isSQL ? StringUtil.getTrimedString(req.getString("sql")) : null;
+ String sql = isSQL ? StringUtil.trim(req.getString("sql")) : null;
String newSql = "";
// String[] lines = sql.split(" \\? "); // StringUtil.split(sql, " \\? ", false);
// int len = lines == null ? 0 : lines.length;
// if (len > 0) {
-// JSONArray args = req.getJSONArray("args");
+// JSONList args = req.getJSONArray("args");
// Set set = hm.keySet();
// Iterator iterator = set.iterator();
//
@@ -1656,11 +1632,11 @@ else if (names != null) {
sql = newSql.trim();
}
- JSONRequest existReq = new JSONRequest();
+ JSONObject existReq = JSON.newJSONObject();
if (isUnit) {
if (req != null) {
// Method <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- apijson.JSONRequest mthd = new apijson.JSONRequest();
+ JSONRequest mthd = new JSONRequest();
if (recordType > 0) {
mthd.setColumn("id");
}
@@ -1681,7 +1657,7 @@ else if (names != null) {
}
else {
// Document <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- apijson.JSONRequest document = new apijson.JSONRequest();
+ JSONRequest document = new JSONRequest();
if (recordType > 0) {
document.setColumn("id");
}
@@ -1701,13 +1677,13 @@ else if (names != null) {
long documentId = existRsp2 == null ? 0 : existRsp2.getId();
JSONRequest request = new JSONRequest();
- apijson.JSONRequest testRecord = new apijson.JSONRequest();
+ JSONRequest testRecord = new JSONRequest();
if (documentId <= 0) {
if (isUnit) {
request.setTag("Method");
// Method <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- apijson.JSONRequest mthd = new apijson.JSONRequest();
+ JSONRequest mthd = new JSONRequest();
mthd.put("from", 2); // 0-测试工具,1-CI/CD,2-流量录制
mthd.put("language", req.getString("language"));
mthd.put(MethodUtil.KEY_UI, req.getInteger(MethodUtil.KEY_UI));
@@ -1728,7 +1704,7 @@ else if (names != null) {
else if (recordType > 0) {
request.setTag("Document");
// Document <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- JSONObject document = new JSONObject(true);
+ JSONObject document = JSON.newJSONObject();
document.put("from", 2); // 0-测试工具,1-CI/CD,2-流量录制
document.put("name", "[Record] " + new java.util.Date().toLocaleString());
document.put("type", reqType);
@@ -1737,7 +1713,7 @@ else if (recordType > 0) {
document.put("request", isSQL ? "{}" : (isBodyEmpty ? JSON.toJSONString(map) : body));
if (isSQL) {
// 没有名称,除非 args 传对象而不是数组
- // JSONArray args = req.getJSONArray("args");
+ // JSONList args = req.getJSONArray("args");
// String argStr = "";
// if (args != null) {
// for (int i = 0; i < args.size(); i++) {
@@ -1761,7 +1737,7 @@ else if (recordType > 0) {
Map m = isSQL ? null : (isBodyEmpty ? map : JSON.parseObject(body));
String config = isSQL ? hs : parseRandomConfig("", m);
- JSONObject random = new JSONObject(true);
+ JSONObject random = JSON.newJSONObject();
random.put("count", 1);
random.put("documentId", documentId);
random.put("config", config.trim());
@@ -1788,7 +1764,7 @@ else if (recordType > 0) {
isDefault = Objects.equals(reqObj, req);
}
catch (Throwable e) {
- Log.w(TAG, "delegate try { Object reqObj = JSON.parse(reqStr); ..." +
+ Log.w(TAG, "delegate try { Object reqObj = parseJSON(reqStr); ..." +
" } catch (Throwable e) = " + e.getMessage());
}
}
@@ -1799,7 +1775,7 @@ else if (recordType > 0) {
else {
long randomId = 0;
try {
- apijson.JSONRequest randomReq = new apijson.JSONRequest();
+ JSONObject randomReq = JSON.newJSONObject();
randomReq.put("Random", random);
JSONObject rsp = newParser(session, GET).parseResponse(randomReq);
@@ -1807,7 +1783,7 @@ else if (recordType > 0) {
randomId = rsp2 == null ? 0 : rsp2.getLongValue("id");
}
catch (Throwable e) {
- Log.w(TAG, "delegate try { apijson.JSONRequest randomReq = new apijson.JSONRequest(); ..." +
+ Log.w(TAG, "delegate try { JSONMap randomReq = JSON.newJSONObject(); ..." +
" } catch (Throwable e) = " + e.getMessage());
}
@@ -1826,7 +1802,7 @@ else if (recordType > 0) {
else { // TestRecord <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
testRecord.put("from", 2); // 0-接口工具,1-CI/CD,2-流量录制
testRecord.put("host", host);
- testRecord.put("response", rspBody); // 用 JSONRequest.put 会转为 JSONObject
+ testRecord.put("response", rspBody); // 用 JSONRequest.put 会转为 JSONMap
} // TestRecord >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
request.put("TestRecord", testRecord);
@@ -1836,7 +1812,7 @@ else if (recordType > 0) {
String response = rsp2 == null ? null : rsp2.getString("response");
if (StringUtil.isNotEmpty(response, true)) {
String header = rsp2.getString("header");
- String[] lines = StringUtil.split(StringUtil.getTrimedString(header), "\n");
+ String[] lines = StringUtil.split(StringUtil.trim(header), "\n");
if (lines != null) {
for (String line : lines) {
@@ -1883,6 +1859,14 @@ protected String sendRequest(HttpSession session, HttpMethod method, String url,
String rspBody = null;
try {
RestTemplate client = new RestTemplate();
+ try { // 支持 PATCH 方法,需要 Maven 依赖 org.apache.httpcomponents.client5:httpclient5
+ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
+ client.setRequestFactory(requestFactory);
+ }
+ catch (Throwable e) {
+ e.printStackTrace();
+ }
+
HttpEntity requestEntity = new HttpEntity<>(method == HttpMethod.GET ? null : body, headers);
ResponseEntity entity = client.exchange(url, method, requestEntity, String.class);
@@ -1943,7 +1927,7 @@ private String parseRandomConfig(String path, Object obj) {
Map m = (Map) obj;
Set extends Entry, ?>> s = m == null ? null : m.entrySet();
if (s != null) {
- // TODO APIAuto 得先支持空 key config += "\n" + path + ": {}"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONArray
+ // TODO APIAuto 得先支持空 key config += "\n" + path + ": {}"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONList
for (Entry, ?> e : s) {
Object k = e == null ? null : e.getKey();
@@ -1961,7 +1945,7 @@ private String parseRandomConfig(String path, Object obj) {
if (obj instanceof Collection) {
Collection c = (Collection) obj;
if (c != null) {
- config += "\n" + path + ": []"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONObject
+ config += "\n" + path + ": []"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONMap
int i = -1;
for (Object v : c) {
@@ -1976,7 +1960,7 @@ private String parseRandomConfig(String path, Object obj) {
if (obj instanceof Array) {
Array a = (Array) obj;
if (a != null) {
- config += "\n" + path + ": []"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONObject
+ config += "\n" + path + ": []"; // 避免默认 JSON 中这个数组为 null 导致后面生成的是 JSONMap
int len = Array.getLength(a);
for (int i = 0; i < len; i++) {
@@ -2011,7 +1995,7 @@ private String parseRandomConfig(String path, Object obj) {
public String execute(@RequestBody String request, HttpSession session) {
try {
if (Log.DEBUG == false) {
- return DemoParser.newErrorResult(new IllegalAccessException("非 DEBUG 模式下不允许调用 /sql/execute !")).toJSONString();
+ return JSON.toJSONString(newErrorResult(new IllegalAccessException("非 DEBUG 模式下不允许调用 /sql/execute !")));
}
// DemoVerifier.verifyLogin(session);
@@ -2065,8 +2049,6 @@ public String execute(@RequestBody String request, HttpSession session) {
account = "test"; // "peter";
password = "test"; // null;
}
- } else if (DemoSQLExecutor.DATABASE_NEBULA.equalsIgnoreCase(prefix)) {
- database = prefix.toUpperCase();
}
}
@@ -2153,7 +2135,7 @@ public String execute(@RequestBody String request, HttpSession session) {
while (rs != null && rs.next()) {
cursorDuration += System.currentTimeMillis() - cursorStartTime;
- JSONObject obj = new JSONObject(true);
+ JSONObject obj = JSON.newJSONObject();
for (int i = 1; i <= length; i++) {
long sqlStartTime = System.currentTimeMillis();
String name = rsmd.getColumnName(i); // rsmd.getColumnLable(i);
@@ -2173,7 +2155,7 @@ public String execute(@RequestBody String request, HttpSession session) {
// }
}
- JSONObject result = DemoParser.newSuccessResult();
+ JSONObject result = newSuccessResult();
result.put("sql", sql);
result.put("args", arg);
if (isWrite) {
@@ -2189,129 +2171,9 @@ public String execute(@RequestBody String request, HttpSession session) {
result.put("time:start|duration|end|parse|sql", startTime + "|" + duration + "|" + endTime + "|" + parseDuration + "|" + sqlDuration);
- if (DemoSQLExecutor.DATABASE_NEBULA.equalsIgnoreCase(database) == false) {
- return result.toJSONString();
- }
-
- return com.alibaba.fastjson.JSON.toJSONString(result, new ValueFilter() {
- @Override
- public Object process(Object o, String key, Object val) {
-// if (val instanceof ValueWrapper) {
-// return process(o, key, ((ValueWrapper) val).getValue());
-// }
-//
-// if (val instanceof Value) {
-// return process(o, key, ((Value) val).getFieldValue());
-// }
-//
-// if (val instanceof Vertex) {
-// JSONObject obj = new JSONObject(true);
-// obj.put("vid", new String(((Vertex) val).getVid().getSVal()));
-// obj.put("str", val.toString());
-//
-// List tags = ((Vertex) val).getTags();
-//
-// if (tags != null) {
-// JSONArray arr = new JSONArray();
-// for (int i = 0; i < tags.size(); i++) {
-// arr.add(process(o, String.valueOf(i), tags.get(i)));
-// }
-// obj.put("tags", arr);
-// }
-//
-// return obj;
-// }
-//
-// if (val instanceof Tag) {
-// JSONObject obj = new JSONObject(true);
-// obj.put("name", new String(((Tag) val).getName()));
-// obj.put("str", val.toString());
-//
-// Map props = ((Tag) val).getProps();
-//
-// if (props != null) {
-// JSONObject propsObj = new JSONObject(true);
-// props.forEach(new BiConsumer() {
-// @Override
-// public void accept(byte[] bytes, Value value) {
-// String k = new String(bytes);
-// propsObj.put(k, process(propsObj, k, value));
-// }
-// });
-// obj.put("props", propsObj);
-// }
-//
-// return obj;
-// }
-//
-// if (val instanceof Edge) {
-// JSONObject obj = new JSONObject(true);
-// obj.put("name", new String(((Edge) val).getName()));
-// obj.put("str", val.toString());
-//
-// Map props = ((Edge) val).getProps();
-//
-// if (props != null) {
-// JSONObject propsObj = new JSONObject(true);
-// props.forEach(new BiConsumer() {
-// @Override
-// public void accept(byte[] bytes, Value value) {
-// String k = new String(bytes);
-// propsObj.put(k, process(propsObj, k, value));
-// }
-// });
-// obj.put("props", propsObj);
-// }
-//
-// return obj;
-// }
-//
-// if (val instanceof NullType) {
-// return null;
-// }
-//
-// if (val instanceof DateWrapper) {
-// return ((DateWrapper) val).toString();
-// }
-//
-// if (val instanceof TimeWrapper) {
-// return ((TimeWrapper) val).getLocalTimeStr();
-// }
-//
-// if (val instanceof DateTimeWrapper) {
-// return ((DateTimeWrapper) val).getLocalDateTimeStr();
-// }
-//
-// if (val instanceof DurationWrapper) {
-// return ((DurationWrapper) val).getMicroseconds();
-// }
-//
-// if (val instanceof Date) {
-// Date d = (Date) val;
-// return new java.sql.Date(d.getYear() - 1900, d.getMonth(), d.getDay()).toString();
-// }
-//
-// if (val instanceof Time) {
-// Time t = (Time) val;
-// return new java.sql.Time(t.getHour(), t.getMinute(), t.getSec()).toString();
-// }
-//
-// if (val instanceof DateTime) {
-// DateTime dt = (DateTime) val;
-// // return new java.util.Date(dt.getYear(), dt.getNonth(), dt.getDayO, dt.getHour(), dt.getMinute(), dt.getSec0).toGnTString();
-// return new java.sql.Date(dt.getYear() - 1988, dt.getMonth(), dt.getDay())
-// + " " + new java.sql.Time(dt.getHour(), dt.getMinute(), dt.getSec());
-// }
-//
-// if (val instanceof Duration) {
-// return ((Duration) val).getMicroseconds();
-// }
-
- return val;
- }
- }, SerializerFeature.WriteMapNullValue);
+ return result.toJSONString();
} catch (Exception e) {
- JSONObject result = DemoParser.newErrorResult(e);
+ JSONObject result = newErrorResult(e);
result.put("throw", e.getClass().getName());
result.put("trace:stack", e.getStackTrace());
@@ -2322,7 +2184,7 @@ public Object process(Object o, String key, Object val) {
return result.toJSONString();
}
} catch (Exception e) {
- JSONObject result = DemoParser.newErrorResult(e);
+ JSONObject result = newErrorResult(e);
result.put("throw", e.getClass().getName());
result.put("trace:stack", e.getStackTrace());
return result.toJSONString();
@@ -2797,15 +2659,15 @@ public String ui() {
// 为 UnitAuto 提供的单元测试接口 https://github.com/TommyLemon/UnitAuto <<<<<<<<<<<<<<<<<<<<<<<<<<<
- @PostMapping("method/list")
- public JSONObject listMethod(@RequestBody String request) {
- return super.listMethod(request);
- }
-
- @PostMapping("method/invoke")
- public void invokeMethod(@RequestBody String request, HttpServletRequest servletRequest) {
- super.invokeMethod(request, servletRequest);
- }
+ //@PostMapping("method/list")
+ //public JSONMap listMethod(@RequestBody String request) {
+ // return super.listMethod(request);
+ //}
+ //
+ //@PostMapping("method/invoke")
+ //public void invokeMethod(@RequestBody String request, HttpServletRequest servletRequest) {
+ // super.invokeMethod(request, servletRequest);
+ //}
// 为 UnitAuto 提供的单元测试接口 https://github.com/TommyLemon/UnitAuto >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/FileController.java b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/FileController.java
index 7687633d..98948702 100755
--- a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/FileController.java
+++ b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/boot/FileController.java
@@ -21,7 +21,7 @@
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSONObject;
import apijson.demo.DemoParser;
@@ -78,7 +78,7 @@ public void initFileRepository(){
public JSONObject files() {
JSONObject res = new JSONObject();
res.put("data", fileRepository);
- return DemoParser.extendSuccessResult(res);
+ return new DemoParser().extendSuccessResult(res);
}
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@@ -96,11 +96,11 @@ public JSONObject upload(@RequestParam("file") MultipartFile file) {
JSONObject res = new JSONObject();
res.put("path", file.getOriginalFilename());
res.put("size", file.getBytes().length);
- return DemoParser.extendSuccessResult(res);
+ return new DemoParser().extendSuccessResult(res);
}
catch (Exception e) {
e.printStackTrace();
- return DemoParser.newErrorResult(e);
+ return new DemoParser().newErrorResult(e);
}
}
diff --git a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoFunctionParser.java b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoFunctionParser.java
index 0f58395a..b0262156 100644
--- a/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoFunctionParser.java
+++ b/APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/java/apijson/demo/DemoFunctionParser.java
@@ -16,20 +16,20 @@
import java.util.*;
+import apijson.NotNull;
+import apijson.RequestMethod;
+import apijson.StringUtil;
+import apijson.fastjson2.JSON;
+import apijson.fastjson2.JSONRequest;
+import apijson.fastjson2.JSONResponse;
import jakarta.servlet.http.HttpSession;
import apijson.orm.script.JavaScriptExecutor;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
-import apijson.JSONResponse;
-import apijson.NotNull;
-import apijson.RequestMethod;
-import apijson.StringUtil;
-import apijson.framework.APIJSONFunctionParser;
+import apijson.fastjson2.APIJSONFunctionParser;
import apijson.orm.AbstractVerifier;
-import apijson.orm.JSONRequest;
import apijson.orm.Visitor;
@@ -41,7 +41,7 @@ public class DemoFunctionParser extends APIJSONFunctionParser {
public static final String TAG = "DemoFunctionParser";
static {
- SCRIPT_EXECUTOR_MAP.put("js", new JavaScriptExecutor());
+ SCRIPT_EXECUTOR_MAP.put("js", new JavaScriptExecutor());
}
public DemoFunctionParser() {
@@ -100,13 +100,6 @@ public void verifyIdList(@NotNull JSONObject curObj, @NotNull String idList) thr
}
}
- @Override
- public boolean isContain(JSONObject curObj, String array, String value) {
- List list = apijson.JSON.parseArray(getArgStr(array), String.class);
- Object val = getArgVal(value);
- return list != null && list.contains(val == null ? null : String.valueOf(val));
- }
-
/**
* @param curObj
* @param urlList
@@ -148,10 +141,10 @@ public int deleteCommentOfMoment(@NotNull JSONObject curObj, @NotNull String mom
return 0;
}
- JSONRequest request = new JSONRequest();
+ JSONObject request = JSON.newJSONObject();
//Comment<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- JSONRequest comment = new JSONRequest();
+ JSONObject comment = JSON.newJSONObject();
comment.put("momentId", mid);
request.put("Comment", comment);
@@ -177,10 +170,10 @@ public int deleteChildComment(@NotNull JSONObject curObj, @NotNull String toId)
//递归获取到全部子评论id
- JSONRequest request = new JSONRequest();
+ JSONObject request = JSON.newJSONObject();
//Comment<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- JSONRequest comment = new JSONRequest();
+ JSONObject comment = JSON.newJSONObject();;
comment.put("id{}", getChildCommentIdList(tid));
request.put("Comment", comment);
@@ -196,7 +189,7 @@ public int deleteChildComment(@NotNull JSONObject curObj, @NotNull String toId)
private JSONArray getChildCommentIdList(long tid) {
JSONArray arr = new JSONArray();
- JSONRequest request = new JSONRequest();
+ JSONObject request = JSON.newJSONObject();
//Comment-id[]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
JSONRequest idItem = new JSONRequest();
@@ -205,10 +198,10 @@ private JSONArray getChildCommentIdList(long tid) {
JSONRequest comment = new JSONRequest();
comment.put("toId", tid);
comment.setColumn("id");
- idItem.put("Comment", comment);
+ idItem.put("Comment", JSON.newJSONObject(comment));
//Comment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- request.putAll(idItem.toArray(0, 0, "Comment-id"));
+ request.putAll(JSON.newJSONObject(idItem.toArray(0, 0, "Comment-id")));
//Comment-id[]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
JSONObject rp = new DemoParser().setNeedVerify(false).parseResponse(request);
@@ -217,10 +210,9 @@ private JSONArray getChildCommentIdList(long tid) {
if (a != null) {
arr.addAll(a);
- JSONArray a2;
for (int i = 0; i < a.size(); i++) {
- a2 = getChildCommentIdList(a.getLongValue(i));
+ JSONArray a2 = getChildCommentIdList(a.getLongValue(i));
if (a2 != null) {
arr.addAll(a2);
}
@@ -233,8 +225,7 @@ private JSONArray getChildCommentIdList(long tid) {
/**TODO 仅用来测试 "key-()":"getIdList()" 和 "key()":"getIdList()"
* @param curObj
- * @return JSONArray 只能用JSONArray,用long[]会在SQLConfig解析崩溃
- * @throws Exception
+ * @return JSONList 只能用JSONArray,用long[]会在SQLConfig解析崩溃
*/
public JSONArray getIdList(@NotNull JSONObject curObj) {
return new JSONArray(new ArrayList