Visitar URL original
去除 fastjson 并支持各种 JSON 库 by TommyLemon · Pull Request #810 · APIJSON/APIJSON · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
解决 JOIN 报错 JSON 转换类型不匹配
  • Loading branch information
TommyLemon committed Mar 30, 2025
commit e5001aa9eda9e37ada71268fff2e3e6f903d315e
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author Lemon
*/
public abstract class AbstractFunctionParser<T, M extends Map<String, Object>, L extends List<Object>>
implements FunctionParser<T, M, L> { //, JSONParser<M, L> {
implements FunctionParser<T, M, L> {
private static final String TAG = "AbstractFunctionParser";

/**是否解析参数 key 的对应的值,不用手动编码 curObj.getString(key)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
* @author Lemon
*/
public abstract class AbstractObjectParser<T, M extends Map<String, Object>, L extends List<Object>>
implements ObjectParser<T, M, L> { //, JSONParser<M, L> {
implements ObjectParser<T, M, L> {
private static final String TAG = "AbstractObjectParser";

@NotNull
Expand Down Expand Up @@ -1320,5 +1320,4 @@ public Map<String, M> getChildMap() {
return childMap;
}


}
23 changes: 13 additions & 10 deletions APIJSONORM/src/main/java/apijson/orm/AbstractParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,7 @@ public M onObjectParse(final M request, String parentPath, String name
page += min;
max += min;

Map<String, Object> pagination = new LinkedHashMap<String, Object>();
M pagination = (M) JSON.createJSONObject();
Object explain = rp.get(JSONResponse.KEY_EXPLAIN);
if (explain instanceof Map<?, ?>) {
pagination.put(JSONResponse.KEY_EXPLAIN, explain);
Expand Down Expand Up @@ -1509,7 +1509,7 @@ else if (childKeys.length == 1 && JSONRequest.isTableKey(childKeys[0])) { //
* @return
* @throws Exception
*/
private List<Join<T, M, L>> onJoinParse(Object join, Map<String, Object> request) throws Exception {
private List<Join<T, M, L>> onJoinParse(Object join, M request) throws Exception {
Map<String, Object> joinMap = null;

if (join instanceof Map<?, ?>) {
Expand Down Expand Up @@ -1584,8 +1584,8 @@ else if (join != null){
}

// 取出Table对应的JSONObject,及内部引用赋值 key:value
Map<String, Object> tableObj;
Map<String, Object> parentPathObj; // 保留
M tableObj;
M parentPathObj; // 保留
try {
parentPathObj = arrKey == null ? request : JSON.get(request, arrKey); // 保留
tableObj = parentPathObj == null ? null : JSON.get(parentPathObj, tableKey);
Expand All @@ -1595,7 +1595,7 @@ else if (join != null){
}
catch (Exception e2) {
throw new IllegalArgumentException(JSONRequest.KEY_JOIN + ":'" + e.getKey() + "' 对应的 " + tableKey + ":value 中 value 类型不合法!" +
"必须是 {} 这种 Map<String, Object> 格式!" + e2.getMessage());
"必须是 {} 这种 Map<String, Object> 格式!" + e2.getMessage());
}

if (arrKey != null) {
Expand All @@ -1613,7 +1613,7 @@ else if (join != null){

boolean isAppJoin = "@".equals(joinType);

Map<String, Object> refObj = new LinkedHashMap<String, Object>(tableObj.size());
M refObj = (M) JSON.createJSONObject();

String key = index < 0 ? null : path.substring(index + 1); // id@
if (key != null) { // 指定某个 key 为 JOIN ON 条件
Expand All @@ -1625,7 +1625,7 @@ else if (join != null){

if (tableObj.get(key) instanceof String == false) {
throw new IllegalArgumentException(JSONRequest.KEY_JOIN + ":" + e.getKey() + "' 对应的 "
+ tableKey + ":{ " + key + ": value } 中 value 类型不合法!必须为同层级引用赋值路径 String!");
+ tableKey + ":{ " + key + ": value } 中 value 类型不合法!必须为同层级引用赋值路径 String!");
}

if (isAppJoin && StringUtil.isName(key.substring(0, key.length() - 1)) == false) {
Expand All @@ -1639,7 +1639,7 @@ else if (join != null){

Set<Entry<String, Object>> tableSet = tableObj.entrySet();
// 取出所有 join 条件
Map<String, Object> requestObj = new LinkedHashMap<String, Object>(); // (Map<String, Object>) obj.clone();
M requestObj = (M) JSON.createJSONObject(); // (Map<String, Object>) obj.clone();

boolean matchSingle = false;
for (Entry<String, Object> tableEntry : tableSet) {
Expand Down Expand Up @@ -1717,13 +1717,16 @@ else if (join != null){
}


Join j = new Join();
Join<T, M, L> j = new Join<>();
j.setPath(e.getKey());
j.setJoinType(joinType);
j.setTable(table);
j.setAlias(alias);
j.setOuter((Map<String, Object>) outer);

M outerObj = (M) JSON.createJSONObject((Map<String, Object>) outer);
j.setOuter(outerObj);
j.setRequest(requestObj);

if (arrKey != null) {
Integer count = getInteger(parentPathObj, JSONRequest.KEY_COUNT);
j.setCount(count == null ? getDefaultQueryCount() : count);
Expand Down
11 changes: 5 additions & 6 deletions APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
* @param <T> id 与 userId 的类型,一般为 Long
*/
public abstract class AbstractVerifier<T, M extends Map<String, Object>, L extends List<Object>>
implements Verifier<T, M, L>, IdCallback<T> { // , JSONParser<M, L> {
implements Verifier<T, M, L>, IdCallback<T> {
private static final String TAG = "AbstractVerifier";

/**为 PUT, DELETE 强制要求必须有 id/id{}/id{}@ 条件
Expand Down Expand Up @@ -381,7 +381,7 @@ public void verifyUseRole(SQLConfig<T, M, L> config, String table, RequestMethod
Collection<Object> requestIdArray = (Collection<Object>) config.getWhere(visitorIdKey + "{}", true); // 不能是 &{}, |{} 不要传,直接 {}
if (requestId != null) {
if (requestIdArray == null) {
requestIdArray = createJSONArray();
requestIdArray = (L) JSON.createJSONArray();
}
requestIdArray.add(requestId);
}
Expand Down Expand Up @@ -530,13 +530,13 @@ public void verifyRepeat(String table, String key, Object value, long exceptId)
throw new UnsupportedDataTypeException(key + ":value 中value的类型不能为JSON!");
}

M tblObj = createJSONObject();
M tblObj = (M) JSON.createJSONObject();
tblObj.put(key, value);
if (exceptId > 0) {//允许修改自己的属性为该属性原来的值
tblObj.put(JSONRequest.KEY_ID + "!", exceptId); // FIXME 这里 id 写死了,不支持自定义
}

M req = createJSONObject();
M req = (M) JSON.createJSONObject();
req.put(table, tblObj);
Map<String, Object> repeat = createParser().setMethod(HEAD).setNeedVerify(true).parseResponse(req);

Expand Down Expand Up @@ -1620,7 +1620,7 @@ else if (tk.endsWith("<>")) { //rv包含tv内的值

L array = AbstractSQLConfig.newJSONArray(tv, new JSONCreator<Map<String, Object>, L>() {
@Override
public Map<String, Object> createJSONObject() {
public M createJSONObject() {
return (M) JSON.createJSONObject();
}

Expand Down Expand Up @@ -1885,5 +1885,4 @@ public static String getCacheKeyForRequest(String method, String tag) {
return method + "/" + tag;
}


}
34 changes: 1 addition & 33 deletions APIJSONORM/src/main/java/apijson/orm/FunctionParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
/**远程函数解析器
* @author Lemon
*/
public interface FunctionParser<T extends Object, M extends Map<String, Object>, L extends List<Object>> extends JSONParser<M, L> {
public interface FunctionParser<T, M extends Map<String, Object>, L extends List<Object>> {

Object invoke(@NotNull String function, @NotNull M currentObject) throws Exception;
Object invoke(@NotNull String function, @NotNull M currentObject, boolean containRaw) throws Exception;
Expand Down Expand Up @@ -51,36 +51,4 @@ public interface FunctionParser<T extends Object, M extends Map<String, Object>,
M getCurrentObject();
FunctionParser<T, M, L> setCurrentObject(@NotNull M currentObject);

default M createJSONObject() {
return (M) new JSONObject();
}

default L createJSONArray() {
return (L) new JSONArray();
}

default String toJSONString(Object obj) {
return JSON.toJSONString(obj);
}

default Object parseJSON(Object json) {
return JSON.parseJSON(json);
}

default M parseObject(Object json) {
return (M) parseObject(json, JSONObject.class);
}

default <T> T parseObject(Object json, Class<T> clazz) {
return JSON.parseObject(json, clazz);
}

default L parseArray(Object json) {
return (L) parseObject(json, JSONArray.class);
}

default <T> List<T> parseArray(Object json, Class<T> clazz) {
return JSON.parseArray(json, clazz);
}

}
6 changes: 3 additions & 3 deletions APIJSONORM/src/main/java/apijson/orm/Join.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,15 +161,15 @@ public boolean isSQLJoin() {
return ! isAppJoin();
}

public static boolean isSQLJoin(Join j) {
public static boolean isSQLJoin(Join<?, ?, ?> j) {
return j != null && j.isSQLJoin();
}

public static boolean isAppJoin(Join j) {
public static boolean isAppJoin(Join<?, ?, ?> j) {
return j != null && j.isAppJoin();
}

public static boolean isLeftOrRightJoin(Join j) {
public static boolean isLeftOrRightJoin(Join<?, ?, ?> j) {
return j != null && j.isLeftOrRightJoin();
}

Expand Down
34 changes: 1 addition & 33 deletions APIJSONORM/src/main/java/apijson/orm/ObjectParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/**简化Parser,getObject和getArray(getArrayConfig)都能用
* @author Lemon
*/
public interface ObjectParser<T, M extends Map<String, Object>, L extends List<Object>> { // extends JSONParser<M, L> {
public interface ObjectParser<T, M extends Map<String, Object>, L extends List<Object>> {

Parser<T, M, L> getParser();
ObjectParser<T, M, L> setParser(Parser<T, M, L> parser);
Expand Down Expand Up @@ -164,36 +164,4 @@ public interface ObjectParser<T, M extends Map<String, Object>, L extends List<O
Map<String, Map<String, String>> getFunctionMap();
Map<String, M> getChildMap();

// default M createJSONObject() {
// return (M) new JSONObject();
// }
//
// default L createJSONArray() {
// return (L) new JSONArray();
// }
//
// default String toJSONString(Object obj) {
// return JSON.toJSONString(obj);
// }
//
// default Object parseJSON(Object json) {
// return JSON.parseJSON(json);
// }
//
// default M parseObject(Object json) {
// return (M) parseObject(json, JSONObject.class);
// }
//
// default <T> T parseObject(Object json, Class<T> clazz) {
// return JSON.parseObject(json, clazz);
// }
//
// default L parseArray(Object json) {
// return (L) parseObject(json, JSONArray.class);
// }
//
// default <T> List<T> parseArray(Object json, Class<T> clazz) {
// return JSON.parseArray(json, clazz);
// }

}
34 changes: 1 addition & 33 deletions APIJSONORM/src/main/java/apijson/orm/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
/**解析器
* @author Lemon
*/
public interface Parser<T, M extends Map<String, Object>, L extends List<Object>> { // extends JSONParser<M, L> {
public interface Parser<T, M extends Map<String, Object>, L extends List<Object>> {

@NotNull
Visitor<T> getVisitor();
Expand Down Expand Up @@ -130,36 +130,4 @@ M parseCorrectRequest(RequestMethod method, String tag, int version, String name
M newSuccessResult();
M newErrorResult(Exception e);

// default M createJSONObject() {
// return (M) new JSONObject();
// }
//
// default L createJSONArray() {
// return (L) new JSONArray();
// }
//
// default String toJSONString(Object obj) {
// return JSON.toJSONString(obj);
// }
//
// default Object parseJSON(Object json) {
// return JSON.parseJSON(json);
// }
//
// default M parseObject(Object json) {
// return (M) parseObject(json, JSONObject.class);
// }
//
// default <T> T parseObject(Object json, Class<T> clazz) {
// return JSON.parseObject(json, clazz);
// }
//
// default L parseArray(Object json) {
// return (L) parseObject(json, JSONArray.class);
// }
//
// default <T> List<T> parseArray(Object json, Class<T> clazz) {
// return JSON.parseArray(json, clazz);
// }

}
34 changes: 1 addition & 33 deletions APIJSONORM/src/main/java/apijson/orm/SQLExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
/**executor for query(read) or update(write) MySQL database
* @author Lemon
*/
public interface SQLExecutor<T, M extends Map<String, Object>, L extends List<Object>> { // extends JSONParser<M, L> {
public interface SQLExecutor<T, M extends Map<String, Object>, L extends List<Object>> {
Parser<T, M, L> getParser();
SQLExecutor<T, M, L> setParser(Parser<T, M, L> parser);

Expand Down Expand Up @@ -135,36 +135,4 @@ default Statement getStatement(@NotNull SQLConfig<T, M, L> config) throws Except

long getSqlResultDuration();

// default M createJSONObject() {
// return (M) new JSONObject();
// }
//
// default L createJSONArray() {
// return (L) new JSONArray();
// }
//
// default String toJSONString(Object obj) {
// return JSON.toJSONString(obj);
// }
//
// default Object parseJSON(Object json) {
// return JSON.parseJSON(json);
// }
//
// default M parseObject(Object json) {
// return (M) parseObject(json, JSONObject.class);
// }
//
// default <T> T parseObject(Object json, Class<T> clazz) {
// return JSON.parseObject(json, clazz);
// }
//
// default L parseArray(Object json) {
// return (L) parseObject(json, JSONArray.class);
// }
//
// default <T> List<T> parseArray(Object json, Class<T> clazz) {
// return JSON.parseArray(json, clazz);
// }

}
Loading