Skip to content

Commit 0400037

Browse files
committed
优化主键泛型,兼容 String 类型;;删除多余的远程函数示例
1 parent ef32ed5 commit 0400037

7 files changed

Lines changed: 104 additions & 105 deletions

File tree

src/main/java/apijson/framework/APIJSONApplication.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public class APIJSONApplication {
2828
public static final String TAG = "APIJSONApplication";
2929

3030
@NotNull
31-
public static APIJSONCreator DEFAULT_APIJSON_CREATOR;
31+
public static APIJSONCreator<? extends Object> DEFAULT_APIJSON_CREATOR;
3232
static {
33-
DEFAULT_APIJSON_CREATOR = new APIJSONCreator();
33+
DEFAULT_APIJSON_CREATOR = new APIJSONCreator<>();
3434
}
3535

3636

@@ -54,7 +54,7 @@ public static void init(boolean shutdownWhenServerError) throws Exception {
5454
* @return
5555
* @throws Exception
5656
*/
57-
public static void init(@NotNull APIJSONCreator creator) throws Exception {
57+
public static <T extends Object> void init(@NotNull APIJSONCreator<T> creator) throws Exception {
5858
init(true, creator);
5959
}
6060
/**初始化,加载所有配置并校验
@@ -63,7 +63,7 @@ public static void init(@NotNull APIJSONCreator creator) throws Exception {
6363
* @return
6464
* @throws Exception
6565
*/
66-
public static void init(boolean shutdownWhenServerError, @NotNull APIJSONCreator creator) throws Exception {
66+
public static <T extends Object> void init(boolean shutdownWhenServerError, @NotNull APIJSONCreator<T> creator) throws Exception {
6767
System.out.println("\n\n\n\n\n<<<<<<<<<<<<<<<<<<<<<<<<< APIJSON 开始启动 >>>>>>>>>>>>>>>>>>>>>>>>\n");
6868
DEFAULT_APIJSON_CREATOR = creator;
6969

src/main/java/apijson/framework/APIJSONController.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,28 +61,29 @@
6161
* <br > 3.调试方便 - 建议使用 APIAuto-机器学习自动化接口管理工具(https://github.com/TommyLemon/APIAuto)
6262
* @author Lemon
6363
*/
64-
public class APIJSONController {
64+
public class APIJSONController<T extends Object> {
6565
public static final String TAG = "APIJSONController";
6666

6767
@NotNull
68-
public static APIJSONCreator APIJSON_CREATOR;
68+
public static APIJSONCreator<? extends Object> APIJSON_CREATOR;
6969
static {
70-
APIJSON_CREATOR = new APIJSONCreator();
70+
APIJSON_CREATOR = new APIJSONCreator<>();
7171
}
7272

7373
public String getRequestURL() {
7474
return null;
7575
}
7676

77-
public Parser<Long> newParser(HttpSession session, RequestMethod method) {
78-
Parser<Long> parser = APIJSON_CREATOR.createParser();
77+
public Parser<T> newParser(HttpSession session, RequestMethod method) {
78+
@SuppressWarnings("unchecked")
79+
Parser<T> parser = (Parser<T>) APIJSON_CREATOR.createParser();
7980
parser.setMethod(method);
8081
if (parser instanceof APIJSONParser) {
81-
((APIJSONParser) parser).setSession(session);
82+
((APIJSONParser<T>) parser).setSession(session);
8283
}
8384
// 可以更方便地通过日志排查错误
8485
if (parser instanceof AbstractParser) {
85-
((AbstractParser<?>) parser).setRequestURL(getRequestURL());
86+
((AbstractParser<T>) parser).setRequestURL(getRequestURL());
8687
}
8788
return parser;
8889
}

src/main/java/apijson/framework/APIJSONCreator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
/**APIJSON相关创建器
2828
* @author Lemon
2929
*/
30-
public class APIJSONCreator implements ParserCreator<Long>, VerifierCreator<Long>, SQLCreator {
30+
public class APIJSONCreator<T> implements ParserCreator<T>, VerifierCreator<T>, SQLCreator {
3131

3232
@Override
33-
public Parser<Long> createParser() {
34-
return new APIJSONParser();
33+
public Parser<T> createParser() {
34+
return new APIJSONParser<>();
3535
}
3636

3737
@Override
@@ -40,8 +40,8 @@ public FunctionParser createFunctionParser() {
4040
}
4141

4242
@Override
43-
public Verifier<Long> createVerifier() {
44-
return new APIJSONVerifier();
43+
public Verifier<T> createVerifier() {
44+
return new APIJSONVerifier<>();
4545
}
4646

4747
@Override

src/main/java/apijson/framework/APIJSONFunctionParser.java

Lines changed: 34 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@
1414

1515
package apijson.framework;
1616

17+
import static apijson.RequestMethod.DELETE;
18+
import static apijson.RequestMethod.GET;
19+
import static apijson.RequestMethod.GETS;
20+
import static apijson.RequestMethod.HEAD;
21+
import static apijson.RequestMethod.HEADS;
22+
import static apijson.RequestMethod.POST;
23+
import static apijson.RequestMethod.PUT;
1724
import static apijson.framework.APIJSONConstant.FUNCTION_;
1825

1926
import java.io.IOException;
2027
import java.rmi.ServerException;
21-
import java.util.ArrayList;
22-
import java.util.Arrays;
2328
import java.util.LinkedHashMap;
2429
import java.util.List;
2530
import java.util.Map;
@@ -34,7 +39,6 @@
3439
import apijson.Log;
3540
import apijson.NotNull;
3641
import apijson.RequestMethod;
37-
import apijson.orm.AbstractVerifier;
3842
import apijson.StringUtil;
3943
import apijson.orm.AbstractFunctionParser;
4044
import apijson.orm.JSONRequest;
@@ -49,9 +53,12 @@ public class APIJSONFunctionParser extends AbstractFunctionParser {
4953
public static final String TAG = "APIJSONFunctionParser";
5054

5155
@NotNull
52-
public static APIJSONCreator APIJSON_CREATOR;
56+
public static APIJSONCreator<? extends Object> APIJSON_CREATOR;
57+
@NotNull
58+
public static final String[] ALL_METHODS;
5359
static {
54-
APIJSON_CREATOR = new APIJSONCreator();
60+
APIJSON_CREATOR = new APIJSONCreator<>();
61+
ALL_METHODS = new String[]{ GET.name(), HEAD.name(), GETS.name(), HEADS.name(), POST.name(), PUT.name(), DELETE.name() };
5562
}
5663

5764
private HttpSession session;
@@ -109,7 +116,7 @@ public static JSONObject init(boolean shutdownWhenServerError) throws ServerExce
109116
* @return
110117
* @throws ServerException
111118
*/
112-
public static JSONObject init(APIJSONCreator creator) throws ServerException {
119+
public static <T extends Object> JSONObject init(APIJSONCreator<T> creator) throws ServerException {
113120
return init(false, creator);
114121
}
115122
/**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
@@ -118,7 +125,7 @@ public static JSONObject init(APIJSONCreator creator) throws ServerException {
118125
* @return
119126
* @throws ServerException
120127
*/
121-
public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator creator) throws ServerException {
128+
public static <T extends Object> JSONObject init(boolean shutdownWhenServerError, APIJSONCreator<T> creator) throws ServerException {
122129
return init(shutdownWhenServerError, creator, null);
123130
}
124131
/**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
@@ -128,9 +135,10 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
128135
* @return
129136
* @throws ServerException
130137
*/
131-
public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator creator, JSONObject table) throws ServerException {
138+
@SuppressWarnings("unchecked")
139+
public static <T extends Object> JSONObject init(boolean shutdownWhenServerError, APIJSONCreator<T> creator, JSONObject table) throws ServerException {
132140
if (creator == null) {
133-
creator = APIJSON_CREATOR;
141+
creator = (APIJSONCreator<T>) APIJSON_CREATOR;
134142
}
135143
APIJSON_CREATOR = creator;
136144

@@ -145,7 +153,7 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
145153
request.putAll(functionItem.toArray(0, 0, FUNCTION_));
146154

147155

148-
JSONObject response = creator.createParser().setMethod(RequestMethod.GET).setNeedVerify(true).parseResponse(request);
156+
JSONObject response = creator.createParser().setMethod(GET).setNeedVerify(true).parseResponse(request);
149157
if (JSONResponse.isSuccess(response) == false) {
150158
onServerError("\n\n\n\n\n !!!! 查询远程函数异常 !!!\n" + response.getString(JSONResponse.KEY_MSG) + "\n\n\n\n\n", shutdownWhenServerError);
151159
}
@@ -158,7 +166,7 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
158166
}
159167

160168

161-
if (isAll) { // 必须在测试 invoke 前把配置 put 进 FUNCTION_MAP!
169+
if (isAll) { // 必须在测试 invoke 前把配置 put 进 FUNCTION_MAP! 如果要做成完全校验通过才更新 FUNCTION_MAP,但又不提供 忽略校验 参数,似乎无解
162170
FUNCTION_MAP = new LinkedHashMap<>();
163171
}
164172
Map<String, JSONObject> newMap = FUNCTION_MAP; // 必须在测试 invoke 前把配置 put 进 FUNCTION_MAP! new LinkedHashMap<>();
@@ -183,18 +191,23 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
183191
newMap.put(name, item); // 必须在测试 invoke 前把配置 put 进 FUNCTION_MAP!
184192

185193
String[] methods = StringUtil.split(item.getString("methods"));
186-
JSONObject r = new APIJSONParser(
187-
methods == null || methods.length <= 0 ? RequestMethod.GET : RequestMethod.valueOf(methods[0])
188-
, false
189-
)
190-
.setTag(item.getString(JSONRequest.KEY_TAG))
191-
.setVersion(item.getIntValue(JSONRequest.KEY_VERSION))
192-
.parseResponse(demo);
193-
194-
if (JSONResponse.isSuccess(r) == false) {
195-
onServerError(JSONResponse.getMsg(r), shutdownWhenServerError);
194+
195+
if (methods == null || methods.length <= 0) {
196+
methods = ALL_METHODS;
196197
}
197198

199+
for (String method : methods) {
200+
JSONObject r = APIJSON_CREATOR.createParser()
201+
.setMethod(RequestMethod.valueOf(method))
202+
.setNeedVerify(false)
203+
.setTag(item.getString(JSONRequest.KEY_TAG))
204+
.setVersion(item.getIntValue(JSONRequest.KEY_VERSION))
205+
.parseResponse(demo);
206+
207+
if (JSONResponse.isSuccess(r) == false) {
208+
onServerError(JSONResponse.getMsg(r), shutdownWhenServerError);
209+
}
210+
}
198211
}
199212

200213
// 必须在测试 invoke 前把配置 put 进 FUNCTION_MAP!
@@ -309,32 +322,6 @@ private static String getFunctionCall(String name, String arguments) {
309322
return name + "(" + StringUtil.getTrimedString(arguments) + ")";
310323
}
311324

312-
/**TODO 仅用来测试 "key-()":"getIdList()" 和 "key()":"getIdList()"
313-
* @param request
314-
* @return JSONArray 只能用JSONArray,用long[]会在SQLConfig解析崩溃
315-
* @throws Exception
316-
*/
317-
public JSONArray getIdList(@NotNull JSONObject request) {
318-
return new JSONArray(new ArrayList<Object>(Arrays.asList(12, 15, 301, 82001, 82002, 38710)));
319-
}
320-
321-
322-
/**TODO 仅用来测试 "key-()":"verifyAccess()"
323-
* @param request
324-
* @return
325-
* @throws Exception
326-
*/
327-
public Object verifyAccess(@NotNull JSONObject request) throws Exception {
328-
long userId = request.getLongValue(apijson.JSONObject.KEY_USER_ID);
329-
String role = request.getString(apijson.JSONObject.KEY_ROLE);
330-
if (AbstractVerifier.OWNER.equals(role) && userId != APIJSONVerifier.getVisitorId(session)) {
331-
throw new IllegalAccessException("登录用户与角色OWNER不匹配!");
332-
}
333-
return null;
334-
}
335-
336-
337-
338325

339326
public double plus(@NotNull JSONObject request, String i0, String i1) {
340327
return request.getDoubleValue(i0) + request.getDoubleValue(i1);

src/main/java/apijson/framework/APIJSONParser.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@
3838
/**请求解析器
3939
* @author Lemon
4040
*/
41-
public class APIJSONParser extends AbstractParser<Long> {
41+
public class APIJSONParser<T extends Object> extends AbstractParser<T> {
4242
public static final String TAG = "APIJSONParser";
4343

4444
@NotNull
45-
public static APIJSONCreator APIJSON_CREATOR;
45+
public static APIJSONCreator<? extends Object> APIJSON_CREATOR;
4646
static {
47-
APIJSON_CREATOR = new APIJSONCreator();
47+
APIJSON_CREATOR = new APIJSONCreator<>();
4848
}
4949

5050

@@ -62,24 +62,26 @@ public APIJSONParser(RequestMethod method, boolean needVerify) {
6262
public HttpSession getSession() {
6363
return session;
6464
}
65-
public APIJSONParser setSession(HttpSession session) {
65+
public APIJSONParser<T> setSession(HttpSession session) {
6666
this.session = session;
6767
setVisitor(APIJSONVerifier.getVisitor(session));
6868
return this;
6969
}
7070

71+
@SuppressWarnings("unchecked")
7172
@Override
72-
public Parser<Long> createParser() {
73-
return APIJSON_CREATOR.createParser();
73+
public Parser<T> createParser() {
74+
return (Parser<T>) APIJSON_CREATOR.createParser();
7475
}
7576
@Override
7677
public FunctionParser createFunctionParser() {
7778
return APIJSON_CREATOR.createFunctionParser();
7879
}
7980

81+
@SuppressWarnings("unchecked")
8082
@Override
81-
public Verifier<Long> createVerifier() {
82-
return APIJSON_CREATOR.createVerifier();
83+
public Verifier<T> createVerifier() {
84+
return (Verifier<T>) APIJSON_CREATOR.createVerifier();
8385
}
8486

8587
@Override

src/main/java/apijson/framework/APIJSONSQLConfig.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@
3737
public class APIJSONSQLConfig extends AbstractSQLConfig {
3838
public static final String TAG = "APIJSONSQLConfig";
3939

40-
public static Callback SIMPLE_CALLBACK;
41-
public static APIJSONCreator APIJSON_CREATOR;
40+
public static Callback<? extends Object> SIMPLE_CALLBACK;
41+
public static APIJSONCreator<? extends Object> APIJSON_CREATOR;
42+
4243
static {
4344
DEFAULT_DATABASE = DATABASE_MYSQL; //TODO 默认数据库类型,改成你自己的
4445
DEFAULT_SCHEMA = "sys"; //TODO 默认模式名,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:
@@ -49,14 +50,17 @@ public class APIJSONSQLConfig extends AbstractSQLConfig {
4950
// TABLE_KEY_MAP.put(User.class.getSimpleName(), "apijson_user");
5051
// TABLE_KEY_MAP.put(Privacy.class.getSimpleName(), "apijson_privacy");
5152

52-
APIJSON_CREATOR = new APIJSONCreator();
53+
APIJSON_CREATOR = new APIJSONCreator<>();
5354

54-
SIMPLE_CALLBACK = new SimpleCallback() {
55+
SIMPLE_CALLBACK = new SimpleCallback<Object>() {
5556

5657
@Override
57-
public SQLConfig getSQLConfig(RequestMethod method, String database, String schema, String table) {
58+
public SQLConfig getSQLConfig(RequestMethod method, String database, String schema,String datasource, String table) {
5859
SQLConfig config = APIJSON_CREATOR.createSQLConfig();
5960
config.setMethod(method);
61+
config.setDatabase(database);
62+
config.setDatasource(datasource);
63+
config.setSchema(schema);
6064
config.setTable(table);
6165
return config;
6266
}

0 commit comments

Comments
 (0)