Skip to content

Commit fdcc49c

Browse files
committed
Java:Solon Demo 升级 APIJSON 8 和 MySQL-JDBC 9.2,移除 fastjson
1 parent e1f09e3 commit fdcc49c

File tree

8 files changed

+121
-57
lines changed

8 files changed

+121
-57
lines changed

APIJSON-Java-Server/APIJSONDemo-Solon/pom.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@
2828
<dependency>
2929
<groupId>com.github.Tencent</groupId>
3030
<artifactId>APIJSON</artifactId>
31-
<version>7.1.0</version>
31+
<version>8.0.0.0.0</version>
3232
</dependency>
3333

3434
<!-- 数据库 JDBC 驱动 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
3535
<dependency>
36-
<groupId>mysql</groupId>
37-
<artifactId>mysql-connector-java</artifactId>
38-
<version>8.0.29</version>
36+
<groupId>com.mysql</groupId>
37+
<artifactId>mysql-connector-j</artifactId>
38+
<version>9.2.0</version>
3939
</dependency>
4040
<!-- 数据库 JDBC 驱动 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
4141

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoApplication.java

+56
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,16 @@
1515
package apijson.demo;
1616

1717
import apijson.Log;
18+
import com.alibaba.fastjson.JSON;
19+
import com.alibaba.fastjson.JSONArray;
20+
import com.alibaba.fastjson.JSONObject;
21+
import com.alibaba.fastjson.parser.Feature;
1822
import org.noear.solon.Solon;
1923
import org.noear.solon.annotation.Configuration;
2024
import org.noear.solon.web.cors.CrossFilter;
25+
import apijson.JSONParser;
2126

27+
import java.util.List;
2228

2329
/**
2430
* Demo Solon Application 主应用程序启动类
@@ -38,6 +44,56 @@ public static void main(String[] args) throws Exception {
3844
});
3945

4046
Log.DEBUG = true; // TODO 上线前改为 false
47+
48+
// 使用 fastjson
49+
apijson.JSON.JSON_OBJECT_CLASS = JSONObject.class;
50+
apijson.JSON.JSON_ARRAY_CLASS = JSONArray.class;
51+
52+
final Feature[] DEFAULT_FASTJSON_FEATURES = {Feature.OrderedField, Feature.UseBigDecimal};
53+
apijson.JSON.DEFAULT_JSON_PARSER = new JSONParser<JSONObject, JSONArray>() {
54+
55+
@Override
56+
public JSONObject createJSONObject() {
57+
return new JSONObject(true);
58+
}
59+
60+
@Override
61+
public JSONArray createJSONArray() {
62+
return new JSONArray();
63+
}
64+
65+
@Override
66+
public String toJSONString(Object obj) {
67+
return obj == null || obj instanceof String ? (String) obj : JSON.toJSONString(obj);
68+
}
69+
70+
@Override
71+
public Object parseJSON(Object json) {
72+
return JSON.parse(toJSONString(json), DEFAULT_FASTJSON_FEATURES);
73+
}
74+
75+
@Override
76+
public JSONObject parseObject(Object json) {
77+
return JSON.parseObject(toJSONString(json), DEFAULT_FASTJSON_FEATURES);
78+
}
79+
80+
@Override
81+
public <T> T parseObject(Object json, Class<T> clazz) {
82+
return JSON.parseObject(toJSONString(json), clazz, DEFAULT_FASTJSON_FEATURES);
83+
}
84+
85+
@Override
86+
public JSONArray parseArray(Object json) {
87+
return JSON.parseArray(toJSONString(json));
88+
}
89+
90+
@Override
91+
public <T> List<T> parseArray(Object json, Class<T> clazz) {
92+
return JSON.parseArray(toJSONString(json), clazz);
93+
}
94+
95+
};
96+
4197
System.out.println("官方网站: http://apijson.cn");
4298
System.out.println("设计规范: https://github.com/Tencent/APIJSON/blob/master/Document.md#3");
4399
System.out.println("测试链接: http://apijson.cn/api?type=JSON&url=http://localhost:8080/get");

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoFunctionParser.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package apijson.demo;
1616

1717
import apijson.orm.AbstractFunctionParser;
18+
import com.alibaba.fastjson.JSONArray;
1819
import com.alibaba.fastjson.JSONObject;
1920

2021
import apijson.RequestMethod;
@@ -24,16 +25,16 @@
2425
* 具体见 https://github.com/Tencent/APIJSON/issues/101
2526
* @author Lemon
2627
*/
27-
public class DemoFunctionParser extends AbstractFunctionParser<Long> {
28+
public class DemoFunctionParser extends AbstractFunctionParser<Long, JSONObject, JSONArray> {
2829
public static final String TAG = "DemoFunctionParser";
2930

3031

3132
public DemoFunctionParser() {
3233
this(null, null, 0, null);
3334
}
35+
3436
public DemoFunctionParser(RequestMethod method, String tag, int version, JSONObject request) {
3537
super(method, tag, version, request);
3638
}
3739

38-
3940
}

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoObjectParser.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import apijson.orm.AbstractObjectParser;
1818
import com.alibaba.fastjson.JSONObject;
19+
import com.alibaba.fastjson.JSONArray;
1920

2021
import java.util.List;
2122

@@ -30,16 +31,18 @@
3031
/**对象解析器,用来简化 Parser
3132
* @author Lemon
3233
*/
33-
public class DemoObjectParser extends AbstractObjectParser<Long> {
34+
public class DemoObjectParser extends AbstractObjectParser<Long, JSONObject, JSONArray> {
3435

35-
public DemoObjectParser(SessionState session, @NotNull JSONObject request, String parentPath, SQLConfig arrayConfig
36+
public DemoObjectParser(SessionState session, @NotNull JSONObject request, String parentPath
37+
, SQLConfig<Long, JSONObject, JSONArray> arrayConfig
3638
, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception {
3739
super(request, parentPath, arrayConfig, isSubquery, isTable, isArrayMainTable);
3840
}
3941

4042

4143
@Override
42-
public SQLConfig newSQLConfig(RequestMethod method, String table, String alias, JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
44+
public SQLConfig<Long, JSONObject, JSONArray> newSQLConfig(RequestMethod method, String table, String alias
45+
, JSONObject request, List<Join<Long, JSONObject, JSONArray>> joinList, boolean isProcedure) throws Exception {
4346
return DemoSQLConfig.newSQLConfig(method, table, alias, request, joinList, isProcedure);
4447
}
4548

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoParser.java

+12-10
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package apijson.demo;
1616

1717
import apijson.orm.*;
18+
import com.alibaba.fastjson.JSONArray;
1819
import com.alibaba.fastjson.JSONObject;
1920

2021
import java.util.HashMap;
@@ -28,7 +29,7 @@
2829
* 具体见 https://github.com/Tencent/APIJSON/issues/38
2930
* @author Lemon
3031
*/
31-
public class DemoParser extends AbstractParser<Long> {
32+
public class DemoParser extends AbstractParser<Long, JSONObject, JSONArray> {
3233

3334
public static final Map<String, SessionState> KEY_MAP;
3435
static {
@@ -69,7 +70,7 @@ public DemoParser(RequestMethod method, boolean needVerify) {
6970

7071

7172
private SessionState session;
72-
public Parser<Long> setSession(SessionState session) {
73+
public Parser<Long, JSONObject, JSONArray> setSession(SessionState session) {
7374
this.session = session;
7475
return this;
7576
}
@@ -79,39 +80,40 @@ public SessionState getSession() {
7980

8081

8182
@Override
82-
public Parser<Long> createParser() {
83+
public Parser<Long, JSONObject, JSONArray> createParser() {
8384
return new DemoParser();
8485
}
8586

8687
@Override
87-
public ObjectParser createObjectParser(JSONObject request, String parentPath, SQLConfig arrayConfig
88+
public ObjectParser<Long, JSONObject, JSONArray> createObjectParser(JSONObject request, String parentPath
89+
, SQLConfig<Long, JSONObject, JSONArray> arrayConfig
8890
, boolean isSubquery, boolean isTable, boolean isArrayMainTable) throws Exception {
8991
return new DemoObjectParser(getSession(), request, parentPath, arrayConfig
9092
, isSubquery, isTable, isArrayMainTable).setMethod(getMethod()).setParser(this);
9193
}
9294

9395
@Override
94-
public FunctionParser createFunctionParser() {
96+
public FunctionParser<Long, JSONObject, JSONArray> createFunctionParser() {
9597
return new DemoFunctionParser();
9698
}
9799

98100
@Override
99-
public SQLConfig createSQLConfig() {
101+
public SQLConfig<Long, JSONObject, JSONArray> createSQLConfig() {
100102
return new DemoSQLConfig();
101103
}
102104

103105
@Override
104-
public SQLExecutor createSQLExecutor() {
106+
public SQLExecutor<Long, JSONObject, JSONArray> createSQLExecutor() {
105107
return new DemoSQLExecutor();
106108
}
107109

108110
@Override
109-
public Verifier<Long> createVerifier() {
111+
public Verifier<Long, JSONObject, JSONArray> createVerifier() {
110112
return new DemoVerifier();
111113
}
112114

113-
private FunctionParser functionParser;
114-
public FunctionParser getFunctionParser() {
115+
private FunctionParser<Long, JSONObject, JSONArray> functionParser;
116+
public FunctionParser<Long, JSONObject, JSONArray> getFunctionParser() {
115117
return functionParser;
116118
}
117119
public Object onFunctionParse(String key, String function, String parentPath, String currentName, JSONObject currentObject, boolean containRaw) throws Exception {

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoSQLConfig.java

+32-35
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020

2121
import apijson.RequestMethod;
2222
import apijson.orm.Join;
23-
import apijson.orm.Join.On;
2423
import apijson.orm.SQLConfig;
24+
import com.alibaba.fastjson.JSONArray;
25+
import com.alibaba.fastjson.JSONObject;
2526

2627

2728
/**SQL配置
@@ -30,7 +31,7 @@
3031
* https://github.com/Tencent/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md#c-1-1%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E9%93%BE%E6%8E%A5
3132
* @author Lemon
3233
*/
33-
public class DemoSQLConfig extends AbstractSQLConfig<Long> {
34+
public class DemoSQLConfig extends AbstractSQLConfig<Long, JSONObject, JSONArray> {
3435

3536
public DemoSQLConfig() {
3637
super(RequestMethod.GET);
@@ -60,59 +61,55 @@ public DemoSQLConfig(RequestMethod method, String table) {
6061

6162

6263
@Override
63-
public String getDBVersion() {
64+
public String gainDBVersion() {
6465
return "8.0.11"; //TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 //MYSQL 8 和 7 使用的 JDBC 配置不一样
6566
}
6667
@Override
67-
public String getDBUri() {
68+
public String gainDBUri() {
6869
// 这个是 MySQL 8.0 及以上,要加 userSSL=false
6970
return "jdbc:mysql://localhost:3306?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";
7071
// 以下是 MySQL 5.7 及以下
7172
// return "jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000
7273
}
7374
@Override
74-
public String getDBAccount() {
75+
public String gainDBAccount() {
7576
return "root"; //TODO 改成你自己的
7677
}
7778
@Override
78-
public String getDBPassword() {
79+
public String gainDBPassword() {
7980
return "apijson"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用, 默认密码为空字符串 ""
8081
}
8182

82-
public static SQLConfig newSQLConfig(RequestMethod method, String table, String alias, com.alibaba.fastjson.JSONObject request, List<Join> joinList, boolean isProcedure) throws Exception {
83-
return AbstractSQLConfig.newSQLConfig(method, table, alias, request, joinList, isProcedure, new SimpleCallback<Object>() {
83+
public static SQLConfig<Long, JSONObject, JSONArray> newSQLConfig(RequestMethod method, String table, String alias, com.alibaba.fastjson.JSONObject request, List<Join<Long, JSONObject, JSONArray>> joinList, boolean isProcedure) throws Exception {
84+
return AbstractSQLConfig.newSQLConfig(method, table, alias, request, joinList, isProcedure, new SimpleCallback<Long, JSONObject, JSONArray>() {
8485
@Override
85-
public SQLConfig getSQLConfig(RequestMethod method, String database, String schema, String datasource, String table) {
86+
public SQLConfig<Long, JSONObject, JSONArray> getSQLConfig(RequestMethod method, String database, String schema, String datasource, String table) {
8687
return new DemoSQLConfig(method, table);
8788
}
8889
});
8990
}
9091

91-
92-
93-
@Override
94-
public boolean isFakeDelete() {
95-
return false;
96-
}
97-
98-
@Override
99-
public Map<String, Object> onFakeDelete(Map map) {
100-
return super.onFakeDelete(map);
101-
}
102-
103-
@Override
104-
protected void onGetCrossJoinString(Join j) throws UnsupportedOperationException {
105-
// 开启 CROSS JOIN 笛卡尔积联表 super.onGetCrossJoinString(j);
106-
}
107-
@Override
108-
protected void onJoinNotRelation(String sql, String quote, Join j, String jt, List<On> onList, On on) {
109-
// 开启 JOIN ON t1.c1 != t2.c2 等不等式关联 super.onJoinNotRelation(sql, quote, j, jt, onList, on);
110-
}
111-
@Override
112-
protected void onJoinComplexRelation(String sql, String quote, Join j, String jt, List<On> onList, On on) {
113-
// 开启 JOIN ON t1.c1 LIKE concat('%', t2.c2, '%') 等复杂关联 super.onJoinComplextRelation(sql, quote, j, jt, onList, on);
114-
}
115-
116-
92+
// @Override
93+
// public boolean isFakeDelete() {
94+
// return false;
95+
// }
96+
//
97+
// @Override
98+
// public Map<String, Object> onFakeDelete(Map<String, Object> map) {
99+
// return super.onFakeDelete(map);
100+
// }
101+
102+
// @Override
103+
// protected void onGainCrossJoinString(Join<Long, JSONObject, JSONArray> j) throws UnsupportedOperationException {
104+
// // 开启 CROSS JOIN 笛卡尔积联表 super.onGetCrossJoinString(j);
105+
// }
106+
// @Override
107+
// protected void onJoinNotRelation(String sql, String quote, Join<Long, JSONObject, JSONArray> j, String jt, List<On> onList, On on) {
108+
// // 开启 JOIN ON t1.c1 != t2.c2 等不等式关联 super.onJoinNotRelation(sql, quote, j, jt, onList, on);
109+
// }
110+
// @Override
111+
// protected void onJoinComplexRelation(String sql, String quote, Join<Long, JSONObject, JSONArray> j, String jt, List<On> onList, On on) {
112+
// // 开启 JOIN ON t1.c1 LIKE concat('%', t2.c2, '%') 等复杂关联 super.onJoinComplexRelation(sql, quote, j, jt, onList, on);
113+
// }
117114

118115
}

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoSQLExecutor.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616

1717
import apijson.Log;
1818
import apijson.orm.AbstractSQLExecutor;
19+
import com.alibaba.fastjson.JSONArray;
20+
import com.alibaba.fastjson.JSONObject;
1921

2022
/**
2123
* SQL 执行器,支持连接池及多数据源
2224
* 具体见 https://github.com/Tencent/APIJSON/issues/151
2325
*
2426
* @author Lemon
2527
*/
26-
public class DemoSQLExecutor extends AbstractSQLExecutor<Long> {
28+
public class DemoSQLExecutor extends AbstractSQLExecutor<Long, JSONObject, JSONArray> {
2729
private static final String TAG = "DemoSQLExecutor";
2830

2931
static {

APIJSON-Java-Server/APIJSONDemo-Solon/src/main/java/apijson/demo/DemoVerifier.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@
1616

1717
import apijson.orm.AbstractVerifier;
1818
import apijson.orm.Parser;
19+
import com.alibaba.fastjson.JSONArray;
20+
import com.alibaba.fastjson.JSONObject;
1921

2022
/**安全校验器,校验请求参数、角色与权限等
2123
* 具体见 https://github.com/Tencent/APIJSON/issues/12
2224
* @author Lemon
2325
*/
24-
public class DemoVerifier extends AbstractVerifier<Long> {
26+
public class DemoVerifier extends AbstractVerifier<Long, JSONObject, JSONArray> {
2527
public static final String TAG = "DemoVerifier";
2628

2729
@Override
28-
public Parser<Long> createParser() {
30+
public Parser<Long, JSONObject, JSONArray> createParser() {
2931
return new DemoParser();
3032
}
33+
3134
}

0 commit comments

Comments
 (0)