Tencent/APIJSON

Cannot invoke "java.util.Map.get(Object)" because "apijson.orm.AbstractVerifier.ACCESS_FAKE_DELETE_MAP" is null

Opened this issue · 5 comments

APIJSON Version/APIJSON 版本号

6.3.0

Database Type & Version/数据库类型及版本号

mysql8

Environment/环境信息

然后提交问题,推荐用以下模板修改,注意要换行保持清晰可读。 
【标题】:Cannot invoke "java.util.Map.get(Object)" because "apijson.orm.AbstractVerifier.ACCESS_FAKE_DELETE_MAP" is null 
【内容】: 
 **环境信息**  
 系统: Windows 11 10.0 
 数据库: <!-- 请填写,例如 MySQL 5.7。默认数据库为 MYSQL --> 
 JDK: 21.0.1 amd64 
 APIJSON: 6.3.0

APIAuto Screenshots/APIAuto 请求与结果完整截屏

程序无法启动

Current Behavior/问题描述

**问题描述**
启动 或者调用 接口报这个错误
Cannot invoke "java.util.Map.get(Object)" because "apijson.orm.AbstractVerifier.ACCESS_FAKE_DELETE_MAP" is null

Expected Behavior/期望结果

不报这个错误,可软删除

Any additional comments?/其它补充说明?

//关闭debug 信息
Log.DEBUG = false;  去启动

没有及时初始化导致的 bug,这里应该在 static 代码块加上
ACCESS_FAKE_DELETE_MAP = new LinkedHashMap<>();
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L133-L150
image

MultiDataSource 等 Demo 没复现是因为 APIJSONVerifier.initAccess 把它初始化了
image
,但如果没有依赖 apijson-framework 并成功调用 APIJSONVerifier.initAccess,ACCESS_FAKE_DELETE_MAP 照样也没初始化,后面 ACCESS_FAKE_DELETE_MAP.get 也会照样报错 NPE。

jitpack 6.3.0 APIJSON 的jar 包 源码也是不对的,

#652 (comment) 这里我有说明

@Override
protected String getKey(SQLConfig<String> config, ResultSet rs, ResultSetMetaData rsmd, int tablePosition, JSONObject table, int columnIndex, Map<String, JSONObject> childMap) throws Exception {
    String key = super.getKey(config, rs, rsmd, tablePosition, table, columnIndex, childMap);
    // 前端传参驼峰命名转为蛇形命名
    return JSONResponse.formatUnderline(key, true);
}

放开这段代码 后 错误日志

java.lang.IllegalArgumentException: URL 路径 /get/sysUserPage 对应的接口不存在!
at apijson.router.APIJSONRouterController.router(APIJSONRouterController.java:181)
at apijson.router.APIJSONRouterController.router(APIJSONRouterController.java:65)

请求参数

{
"SysUser[]":{
"SysUser":{"realName":"超级管理员"},
"page":0,
"count":10
},
"total@":"/SysUser[]/total",
"format":true
}

这个问题应该和之前的 ACCESS_FAKE_DELETE_MAP = null 无关,应该是用了 apijson-router 但没配置 Document 记录导致
https://github.com/APIJSON/apijson-router?tab=readme-ov-file#usage