Skip to content

Commit 08f722d

Browse files
committed
Java:MultiDataSource 更新 APIAuto
1 parent 0de80f7 commit 08f722d

File tree

6 files changed

+916
-391
lines changed

6 files changed

+916
-391
lines changed

APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static/README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<p align="center">☔ HTTP 接口 机器学习零代码测试 和 一站式智能开发管理 工具</p>
66

77
<p align="center" >
8-
<a href="https://github.com/TommyLemon/APIAuto#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B">使用文档</a>
8+
<a href="https://github.com/TommyLemon/APIAuto#%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B">快速上手</a>
99
<a href="https://space.bilibili.com/437134249/search/video?keyword=apiauto">视频教程</a>
1010
<a href="http://apijson.cn/api">在线体验</a>
1111
</p>
@@ -16,13 +16,15 @@
1616

1717
---
1818
敏捷开发最强大易用的 HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释。<br />
19-
提供集 文档、测试、Mock、调试、管理 于一体的一站式体验,还有一键 格式化、注释/取消注释 等高效易用的快捷键。<br />
19+
文档、测试、Mock、调试、管理 于一体的一站式体验,还有一键 格式化、注释/取消注释 等高效易用的快捷键。<br />
2020
在常用功能上远超 Postman, Swagger, YApi, Rap 等其它各种 开源、商业 的 API 文档/测试 工具。<br />
2121
支持 HTTP GET/POST API,智能显示和切换;支持一键导入 Swagger, Rap, YApi 的用例和文档。<br />
2222
不仅适用于 RESTful、类 RESTful、GRPC 的 API,还是腾讯 [APIJSON](https://github.com/Tencent/APIJSON) 官方建议的文档与测试工具。<br />
2323
腾讯内部用户包括 IEG 互动娱乐事业群、TEG 技术工程事业群、CSIG 云与智慧事业群 等, <br />
2424
外部用户包含 工商银行某地分行、500强上市公司传音、跨境电商龙头 SHEIN、行业领头羊社保科技 等。
2525

26+
![](https://user-images.githubusercontent.com/5738175/145665502-94231804-5ea8-4784-b30d-d5558aad0f8d.jpeg)
27+
2628
<h3 align="center" style="text-align:center;">
2729
腾讯 AI 测试圈子演讲(部分)
2830
</h3>
@@ -138,9 +140,9 @@ https://www.bilibili.com/video/BV1JZ4y1d7c8
138140

139141
本项目是纯静态 SPA 网页,下载源码解压后:<br />
140142
可以用浏览器打开 index.html,建议用 [Chrome](https://www.google.com/intl/zh-CN/chrome)[Firefox](https://www.mozilla.org/zh-CN/firefox) (Safari、Edge、IE 等可能有兼容问题),注意此方法不显示 svg 图标。<br />
141-
也可以用 [IntelIJ Webstorm](https://www.jetbrains.com/webstorm/), [IntelliJ IDEA](https://www.jetbrains.com/idea/), [Eclipse](https://www.eclipse.org/) 等 IDE 来打开。<br />
143+
也可以用 [IntelliJ Webstorm](https://www.jetbrains.com/webstorm/), [IntelliJ IDEA](https://www.jetbrains.com/idea/), [Eclipse](https://www.eclipse.org/) 等 IDE 来打开。<br />
142144
也可以部署到服务器并用 [Nginx](https://www.jianshu.com/p/11fa3a1a6d65)[Node](https://segmentfault.com/a/1190000039744899) 反向代理,或者 [把源码放到 SpringBoot 项目的 resources/static 目录](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server)。 <br />
143-
还可以直接访问官方网站 http://apijson.cn/api <br />
145+
还可以直接访问官方网站 http://apijson.cn/api http://apijson.cn:8080 <br />
144146
<br />
145147
把左侧 URL 输入框内基地址改为你主机的地址(例如 http://localhost:8080 ),<br />
146148
然后在右上角 设置 下拉菜单内修改 数据库类型Database、数据库模式Schema。<br />
@@ -212,7 +214,7 @@ https://github.com/Tencent/APIJSON/issues/85
212214
https://github.com/TommyLemon/APIAuto/issues/12
213215

214216
#### 4.apijson.cn 访问不了
215-
托管服务地址改为 http://47.74.39.68:8080 <br />
217+
托管服务地址改为 http://47.98.196.224:8080 <br />
216218
https://github.com/TommyLemon/APIAuto/issues/13
217219

218220
更多问题及解答 <br />

APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static/apijson/CodeUtil.js

Lines changed: 88 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ if (typeof window == 'undefined') {
1717
eval(`
1818
var StringUtil = require("./StringUtil");
1919
var JSONObject = require("./JSONObject");
20+
var JSON5 = require('json5');
2021
`)
2122
} catch (e) {
2223
console.log(e)
@@ -28,23 +29,42 @@ if (typeof window == 'undefined') {
2829
*/
2930
var CodeUtil = {
3031
TAG: 'CodeUtil',
32+
APP_NAME: 'APIAuto',
33+
DIVIDER: '/',
3134

3235
LANGUAGE_KOTLIN: 'Kotlin',
3336
LANGUAGE_JAVA: 'Java',
3437
LANGUAGE_C_SHARP: 'C#',
35-
3638
LANGUAGE_SWIFT: 'Swift',
3739
LANGUAGE_OBJECTIVE_C: 'Objective-C',
38-
3940
LANGUAGE_GO: 'Go',
4041
LANGUAGE_C_PLUS_PLUS: 'C++',
41-
4242
LANGUAGE_TYPE_SCRIPT: 'TypeScript',
4343
LANGUAGE_JAVA_SCRIPT: 'JavaScript',
44-
4544
LANGUAGE_PHP: 'PHP',
4645
LANGUAGE_PYTHON: 'Python',
4746

47+
DATABASE_MYSQL: 'MYSQL',
48+
DATABASE_POSTGRESQL: 'POSTGRESQL',
49+
DATABASE_SQLITE: 'SQLITE',
50+
DATABASE_ORACLE: 'ORACLE',
51+
DATABASE_SQLSERVER: 'SQLSERVER',
52+
DATABASE_DB2: 'DB2',
53+
DATABASE_DAMENG: 'DAMENG',
54+
DATABASE_KINGBASE: 'KINGBASE',
55+
DATABASE_TIDB: 'TIDB',
56+
DATABASE_TDENGINE: 'TDENGINE',
57+
DATABASE_NEBULA: 'NEBULA',
58+
DATABASE_PRESTO: 'PRESTO',
59+
DATABASE_TRINO: 'TRINO',
60+
DATABASE_INFLUXDB: 'INFLUXDB',
61+
DATABASE_CLICKHOUSE: 'CLICKHOUSE',
62+
DATABASE_ELASTICSEARCH: 'ELASTICSEARCH',
63+
DATABASE_REDIS: 'REDIS',
64+
DATABASE_KAFKA: 'KAFKA',
65+
DATABASE_MARIADB: 'MARIADB',
66+
DATABASE_HIVE: 'HIVE',
67+
4868
type: 'JSON',
4969
database: 'MYSQL',
5070
schema: 'sys',
@@ -66,13 +86,13 @@ var CodeUtil = {
6686
*/
6787
parseComment: function (reqStr, tableList, method, database, language, isReq, standardObj, isExtract, isWarning, isAPIJSONRouter) { //怎么都获取不到真正的长度,cols不行,默认20不变,maxLineLength不行,默认undefined不变 , maxLineLength) {
6888
if (StringUtil.isEmpty(reqStr)) {
69-
return '';
89+
return;
7090
}
7191

7292
var reqObj = JSON5.parse(reqStr);
7393

7494
var methodInfo = JSONObject.parseUri(method, isReq) || {};
75-
var method = methodInfo.method;
95+
method = methodInfo.method;
7696
var isRestful = methodInfo.isRestful;
7797
var tag = methodInfo.tag;
7898
var startName = methodInfo.table;
@@ -95,18 +115,21 @@ var CodeUtil = {
95115
}
96116
};
97117

118+
var cc = isRestful == true ? '//' : ' //'; // 对 APIJSON API 要求严格些,因为本来就有字段注释
119+
var ccLen = cc.length;
120+
98121
for (var i = 0; i < lines.length; i ++) {
99122
var line = lines[i].trim() || '';
100123

101124
//每一种都要提取:左边的key
102125
var index = line.indexOf(': '); //可能是 ' 或 ",所以不好用 ': , ": 判断
103126
var key = index < 0 ? (depth <= 1 && startName != null ? startName : '') : line.substring(1, index - 1);
104-
var cIndex = line.indexOf(' //');
127+
var cIndex = line.lastIndexOf(cc);
105128

106129
var comment = '';
107130
if (cIndex >= 0) {
108131
if (isExtract && standardObj != null && (depth != 1 || (key != 'code' && key != 'throw'))) {
109-
comment = line.substring(cIndex + ' //'.length).trim();
132+
comment = line.substring(cIndex + ccLen).trim();
110133
// standardObj = CodeUtil.updateStandardPart(standardObj, names, key, value, comment)
111134
}
112135

@@ -695,12 +718,12 @@ var CodeUtil = {
695718

696719
url = url || '';
697720

698-
var lastIndex = url.lastIndexOf('/');
721+
var lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
699722
var methodUri = url; // lastIndex < 0 ? url : url.substring(lastIndex);
700723
var methodName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
701724

702725
url = url.substring(0, lastIndex);
703-
lastIndex = url.lastIndexOf('/');
726+
lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
704727
var varName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
705728
var modelName = StringUtil.firstCase(varName, true);
706729

@@ -1042,12 +1065,12 @@ var CodeUtil = {
10421065

10431066
url = url || '';
10441067

1045-
var lastIndex = url.lastIndexOf('/');
1068+
var lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
10461069
var methodUri = url; // lastIndex < 0 ? url : url.substring(lastIndex);
10471070
var methodName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
10481071

10491072
url = url.substring(0, lastIndex);
1050-
lastIndex = url.lastIndexOf('/');
1073+
lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
10511074
var varName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
10521075
var modelName = StringUtil.firstCase(varName, true);
10531076

@@ -3008,7 +3031,7 @@ var CodeUtil = {
30083031
}
30093032
}
30103033

3011-
return '? = null' + (isSmart ? '' : ' //' + CodeUtil.initEmptyValue4Type(type, true, isKotlin));
3034+
return '? = null' + (isSmart ? '' : ' //' + CodeUtil.initEmptyValue4Type(type, true, isKotlin));
30123035
},
30133036

30143037
getCode4JavaArgValues: function (reqObj, useVar4ComplexValue) {
@@ -3291,12 +3314,12 @@ var CodeUtil = {
32913314

32923315
url = url || '';
32933316

3294-
var lastIndex = url.lastIndexOf('/');
3317+
var lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
32953318
var methodUri = lastIndex < 0 ? url : url.substring(lastIndex);
32963319
var methodName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
32973320

32983321
url = url.substring(0, lastIndex);
3299-
lastIndex = url.lastIndexOf('/');
3322+
lastIndex = url.lastIndexOf(CodeUtil.DIVIDER);
33003323
var varName = JSONResponse.getVariableName(lastIndex < 0 ? url : url.substring(lastIndex + 1));
33013324
var modelName = StringUtil.firstCase(varName, true);
33023325

@@ -3829,7 +3852,7 @@ var CodeUtil = {
38293852

38303853

38313854
doc += '/**'
3832-
+ '\n *APIAuto 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/APIAuto'
3855+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
38333856
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
38343857
+ '\n */'
38353858
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -3948,7 +3971,7 @@ var CodeUtil = {
39483971

39493972

39503973
doc += '/**'
3951-
+ '\n *APIAuto 自动生成 C++ Struct\n *主页: https://github.com/TommyLemon/APIAuto'
3974+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 C++ Struct\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
39523975
+ '\n *使用方法:\n *1.修改包名 namespace \n *2.#include 需要引入的类,可使用快捷键 Ctrl+Shift+O '
39533976
+ '\n */\n'
39543977
+ '\n#include <string>'
@@ -4066,7 +4089,7 @@ var CodeUtil = {
40664089

40674090

40684091
doc += '/**'
4069-
+ '\n *APIAuto 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/APIAuto'
4092+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
40704093
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
40714094
+ '\n */'
40724095
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -4187,7 +4210,7 @@ var CodeUtil = {
41874210

41884211
doc += '<?php'
41894212
+ '\n/**'
4190-
+ '\n *APIAuto 自动生成 PHP 实体类代码\n *主页: https://github.com/TommyLemon/APIAuto'
4213+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 PHP 实体类代码\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
41914214
+ '\n *使用方法:\n *1.修改包名 namespace \n *2.use 需要引入的类,可使用快捷键 Ctrl+Shift+O '
41924215
+ '\n */'
41934216
+ '\n\nnamespace apijson\\demo\\server\\model;\n\n\n'
@@ -4306,7 +4329,7 @@ var CodeUtil = {
43064329

43074330

43084331
doc += '/**'
4309-
+ '\n *APIAuto 自动生成 JavaBean\n *主页: https://github.com/TommyLemon/APIAuto'
4332+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 Go struct\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
43104333
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
43114334
+ '\n */'
43124335
+ '\npackage model\n\n\n'
@@ -4389,7 +4412,7 @@ var CodeUtil = {
43894412

43904413

43914414
doc += '/**'
4392-
+ '\n *APIAuto 自动生成 C# Bean\n *主页: https://github.com/TommyLemon/APIAuto'
4415+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 C# Bean\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
43934416
+ '\n *使用方法:\n *1.修改包名 namespace \n *2. using 需要引入的类,可使用快捷键 Ctrl+Shift+O '
43944417
+ '\n */\n'
43954418
+ '\nnamespace apijson.demo.server.model'
@@ -4482,7 +4505,7 @@ var CodeUtil = {
44824505

44834506

44844507
doc += '/**'
4485-
+ '\n *APIAuto 自动生成 TypeScript Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4508+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 TypeScript Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
44864509
+ '\n */\n\n\n'
44874510
+ CodeUtil.getComment(database != 'POSTGRESQL' ? table.table_comment : (item.PgClass || {}).table_comment, true)
44884511
+ '\n@MethodAccess'
@@ -4565,7 +4588,7 @@ var CodeUtil = {
45654588

45664589

45674590
doc += '/**'
4568-
+ '\n *APIAuto 自动生成 Python Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4591+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 Python Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
45694592
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
45704593
+ '\n */'
45714594
+ '\npackage apijson.demo.server.model;\n\n\n'
@@ -4679,7 +4702,7 @@ var CodeUtil = {
46794702

46804703

46814704
doc += '/**'
4682-
+ '\n *APIAuto 自动生成 Swift Struct\n *主页: https://github.com/TommyLemon/APIAuto'
4705+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 Swift Struct\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
46834706
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
46844707
+ '\n */'
46854708
+ '\npackage apijson.demo.server.model\n\n\n'
@@ -4756,7 +4779,7 @@ var CodeUtil = {
47564779

47574780

47584781
doc += '/**'
4759-
+ '\n *APIAuto 自动生成 JavaScript Entity\n *主页: https://github.com/TommyLemon/APIAuto'
4782+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 JavaScript Entity\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
47604783
+ '\n */\n\n\n'
47614784
+ CodeUtil.getComment(database != 'POSTGRESQL' ? table.table_comment : (item.PgClass || {}).table_comment, true)
47624785
+ '\n@MethodAccess'
@@ -4850,7 +4873,7 @@ var CodeUtil = {
48504873

48514874

48524875
doc += '/**'
4853-
+ '\n *APIAuto 自动生成 Kotlin Data Class\n *主页: https://github.com/TommyLemon/APIAuto'
4876+
+ '\n *' + CodeUtil.APP_NAME + ' 自动生成 Kotlin Data Class\n *主页: https://github.com/TommyLemon/' + CodeUtil.APP_NAME
48544877
+ '\n *使用方法:\n *1.修改包名 package \n *2.import 需要引入的类,可使用快捷键 Ctrl+Shift+O '
48554878
+ '\n */'
48564879
+ '\npackage apijson.demo.server.model\n\n\n'
@@ -5878,7 +5901,7 @@ var CodeUtil = {
58785901
OWNER: '拥有者',
58795902
ADMIN: '管理员'
58805903
},
5881-
DATABASE_KEYS: ['MYSQL', 'POSTGRESQL', 'SQLSERVER', 'ORACLE', 'DB2', 'DAMENG', 'CLICKHOUSE', 'SQLITE', 'TDENGINE'],
5904+
DATABASE_KEYS: ['MYSQL', 'POSTGRESQL', 'SQLSERVER', 'ORACLE', 'DB2', 'DAMENG', 'KINGBASE', 'MARIADB', 'SQLITE', 'INFLUXDB', 'TDENGINE', 'PRESTO', 'TRINO', 'HIVE', 'TIDB', 'CLICKHOUSE', 'ELASTICSEARCH', 'REDIS'], // , 'KAFKA'],
58825905

58835906
getComment4Function: function (funCallStr, method, language) {
58845907
if (typeof funCallStr != 'string') {
@@ -6667,6 +6690,44 @@ var CodeUtil = {
66676690
}
66686691
else {
66696692
//功能符 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
6693+
6694+
if (columnName.endsWith("()")) {//方法,查询完后处理,先用一个Map<key,function>保存?
6695+
if (['GET', 'HEAD'].indexOf(method) < 0) {
6696+
return ' ! 远程函数只能用于 GET,HEAD 请求!!';
6697+
}
6698+
6699+
if (value != null && valuesIsNotString) {
6700+
return ' ! value必须是String类型!';
6701+
}
6702+
if (value != null) {
6703+
var startIndex = value.indexOf("(");
6704+
if (startIndex <= 0 || value.endsWith(")") == false) {
6705+
return ' ! value必须符合 fun(arg0,arg1..) 这种格式!且不要有任何多余的空格!';
6706+
}
6707+
var fun = value.substring(0, startIndex);
6708+
if (StringUtil.isName(fun) != true) {
6709+
return '! 函数名' + fun + '不合法!value必须符合 fun(arg0,arg1..) 这种格式!且不要有任何多余的空格!';
6710+
}
6711+
}
6712+
6713+
if (isWarning) {
6714+
return ' ';
6715+
}
6716+
6717+
var priority = '';
6718+
if (columnName.endsWith("-()")) {
6719+
priority = ' < 在解析所在对象前优先执行';
6720+
}
6721+
else if (columnName.endsWith("+()")) {
6722+
priority = ' < 在解析所在对象后滞后执行';
6723+
}
6724+
else {
6725+
priority = ',执行时机在解析所在对象后,解析子对象前,可以在 () 前用 + - 设置优先级,例如 key-() 优先执行';
6726+
}
6727+
6728+
return '远程函数' + (isValueNotEmpty ? ',触发调用后端对应的方法/函数' + priority : ',例如 "isContain(praiseUserIdList,userId)"');
6729+
}
6730+
66706731
var hasAt = false;
66716732
if (columnName.endsWith("@")) {//引用,引用对象查询完后处理。fillTarget中暂时不用处理,因为非GET请求都是由给定的id确定,不需要引用
66726733
// 没传 value 进来,不好解析,而且太长导致后面的字段属性被遮住

0 commit comments

Comments
 (0)