From 367de54e0abece40c71c7f7bcf78595abc89709f Mon Sep 17 00:00:00 2001 From: TommyLemon <1184482681@qq.com> Date: Sat, 11 Jul 2020 13:36:51 +0800 Subject: [PATCH 0001/1264] =?UTF-8?q?Update=20=E8=AF=A6=E7=BB=86=E7=9A=84?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...64\346\230\216\346\226\207\346\241\243.md" | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git "a/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" "b/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" index 4d819294f..f99fe156b 100644 --- "a/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" +++ "b/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" @@ -825,11 +825,20 @@ CREATE TABLE `b_stone` ( )ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` +#### 2. 配置权限 +APIJSON 3.7.0  版开始,依赖了 apijson-framework.jar 的不需要写任何代码: -#### 2. 在Model中添加对象并配置权限 +##### 2.1)在 Access 表里加一行记录即可 -项目的model目录下,新增一个类 +![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg) + +~~如果低于 3.7.0 或者未依赖 apijson-framework.jar,而是直接依赖 apijson-orm.jar,则需要编写代码:~~ + + +##### ~~2.1)在Model中添加对象并配置权限~~ + +~~项目的model目录下,新增一个类~~ ```java package apijson.demo.server.model; @@ -841,13 +850,13 @@ public class Stone { } ``` -注解`@MethodAccess`的配置,可以参考其他类 +~~注解`@MethodAccess`的配置,可以参考其他类~~ -由于我们的类名和数据库表名不一致,需要注册一下。如果一样就不需要了。 +~~由于我们的类名和数据库表名不一致,需要注册一下。如果一样就不需要了。~~ -设置数据库的实际表名`DemoSQLConfig`,38行 +~~设置数据库的实际表名`DemoSQLConfig`,38行~~ ```java //表名映射,隐藏真实表名,对安全要求很高的表可以这么做 @@ -860,9 +869,9 @@ public class Stone { -注册权限是必须的,这样程序才能使用你配置的类权限去管理你的接口 +~~注册权限是必须的,这样程序才能使用你配置的类权限去管理你的接口~~ -脚本`DemoVerifier.java`的48行 +~~脚本`DemoVerifier.java`的48行~~ ```java static { //注册权限 @@ -873,9 +882,27 @@ static { //注册权限 ``` #### 3. 接口管理Request表的配置 - -(此处需要作者补充) - +![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg) +可这样设置 structure 字段来配置自动校验请求 JSON 参数:
+```json +"VERIFY":{ + "type{}":[0,1,2] +} +``` +就能校验 type 的值是不是 0,1,2中的一个。
+还有
+```js +"VERIFY": { "money&{}":">0,<=10000" } //自动验证是否 money>0 & money<=10000 +"TYPE": { "balance": "Double" } //自动验证balance类型是否为Double +"UNIQUE": "phone" //强制phone的值为数据库中没有的 +"NECESSARY": "id,name" //强制传id,name两个字段 +"DISALLOW": "balance" //禁止传balance字段 +"INSERT": { "@role": "OWNER" } //如果没传@role就自动添加 +"UPDATE": { "id@": "User/id" } //强制放入键值对 +``` +全部操作符见 [Operation.java](https://github.com/APIJSON/APIJSON/blob/master/APIJSON-Java-Server/APIJSONORM/src/main/java/apijson/orm/Operation.java) 的注释 +
+
:first_quarter_moon_with_face:此处的介绍都只是简要介绍,只是为了引导刚刚接触APIJSON的道友快速了解APIJSON,并不代表APIJSON只有这些功能,具体功能详情参考下列图表 From 0c68da29e7e3c7993bc6c495677069b6900ab717 Mon Sep 17 00:00:00 2001 From: TommyLemon <1184482681@qq.com> Date: Sat, 11 Jul 2020 13:38:37 +0800 Subject: [PATCH 0002/1264] =?UTF-8?q?Update=20=E8=AF=A6=E7=BB=86=E7=9A=84?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...204\350\257\264\346\230\216\346\226\207\346\241\243.md" | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git "a/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" "b/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" index f99fe156b..e2af8cba3 100644 --- "a/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" +++ "b/\350\257\246\347\273\206\347\232\204\350\257\264\346\230\216\346\226\207\346\241\243.md" @@ -833,8 +833,10 @@ APIJSON 3.7.0  版开始,依赖了 apijson-framework.jar 的不需要写任 ![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg) -~~如果低于 3.7.0 或者未依赖 apijson-framework.jar,而是直接依赖 apijson-orm.jar,则需要编写代码:~~ +
+
+~~如果低于 3.7.0 或者未依赖 apijson-framework.jar,而是直接依赖 apijson-orm.jar,则需要编写代码:~~ ##### ~~2.1)在Model中添加对象并配置权限~~ @@ -881,6 +883,9 @@ static { //注册权限 } ``` +
+
+ #### 3. 接口管理Request表的配置 ![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg) 可这样设置 structure 字段来配置自动校验请求 JSON 参数:
From 017e19ce230721f357f6c3b130873110a01c1a12 Mon Sep 17 00:00:00 2001 From: TommyLemon <1184482681@qq.com> Date: Sun, 12 Jul 2020 15:18:13 +0800 Subject: [PATCH 0003/1264] =?UTF-8?q?Android=EF=BC=9AAPIJSONTest=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=87=AA=E5=8A=A8=E5=8C=96=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=20UnitActivity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APIJSON-Android/APIJSONTest/app/build.gradle | 1 + .../app/src/main/AndroidManifest.xml | 11 +- .../java/apijson/demo/ui/AutoActivity.java | 2 +- .../java/apijson/demo/ui/RequestActivity.java | 2 +- .../java/apijson/demo/ui/SelectActivity.java | 5 + .../java/apijson/demo/ui/UnitActivity.java | 180 ++++++++++++++++++ .../src/main/res/layout/select_activity.xml | 6 + .../app/src/main/res/layout/unit_activity.xml | 88 +++++++++ .../app/src/main/res/values-en/strings.xml | 1 + .../app/src/main/res/values/strings.xml | 1 + 10 files changed, 293 insertions(+), 4 deletions(-) create mode 100755 APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/UnitActivity.java create mode 100755 APIJSON-Android/APIJSONTest/app/src/main/res/layout/unit_activity.xml diff --git a/APIJSON-Android/APIJSONTest/app/build.gradle b/APIJSON-Android/APIJSONTest/app/build.gradle index b68d55fe8..80f6410fe 100644 --- a/APIJSON-Android/APIJSONTest/app/build.gradle +++ b/APIJSON-Android/APIJSONTest/app/build.gradle @@ -26,4 +26,5 @@ dependencies { compile 'com.squareup.okhttp:okhttp:2.1.0' compile 'com.alibaba:fastjson:1.2.61' compile 'com.github.APIJSON:apijson-orm:3.9.0' + compile 'com.koushikdutta.async:androidasync:2.+' } diff --git a/APIJSON-Android/APIJSONTest/app/src/main/AndroidManifest.xml b/APIJSON-Android/APIJSONTest/app/src/main/AndroidManifest.xml index 1cef44004..6310e8150 100644 --- a/APIJSON-Android/APIJSONTest/app/src/main/AndroidManifest.xml +++ b/APIJSON-Android/APIJSONTest/app/src/main/AndroidManifest.xml @@ -34,10 +34,17 @@ android:name="apijson.demo.ui.RequestActivity" android:label="@string/request" /> + android:screenOrientation="landscape" + android:windowSoftInputMode="adjustPan" + /> + \ No newline at end of file diff --git a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/AutoActivity.java b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/AutoActivity.java index 31b138128..cb07ad476 100644 --- a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/AutoActivity.java +++ b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/AutoActivity.java @@ -87,7 +87,7 @@ protected void onCreate(Bundle savedInstanceState) { public void copy(View v) { - StringUtil.copyText(context, StringUtil.getString(tvAutoResponse)); + StringUtil.copyText(context, StringUtil.getString((TextView) v)); } public void auto(View v) { diff --git a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/RequestActivity.java b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/RequestActivity.java index cd4c35db0..5c7fe2b73 100644 --- a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/RequestActivity.java +++ b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/RequestActivity.java @@ -283,8 +283,8 @@ public void finish() { @Override protected void onDestroy() { - super.onDestroy(); isAlive = false; + super.onDestroy(); } } diff --git a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/SelectActivity.java b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/SelectActivity.java index 169243a89..7d800e3ea 100644 --- a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/SelectActivity.java +++ b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/SelectActivity.java @@ -122,6 +122,11 @@ public boolean onLongClick(View v) { public void toAuto(View v) { startActivityForResult(AutoActivity.createIntent(context), REQUEST_TO_AUTO); } + + public void toUnit(View v) { + startActivity(UnitActivity.createIntent(context)); + } + public void toUpdateLog(View v) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( StringUtil.getCorrectUrl("github.com/TommyLemon/APIJSON/commits/master")))); diff --git a/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/UnitActivity.java b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/UnitActivity.java new file mode 100755 index 000000000..5d28b0dcf --- /dev/null +++ b/APIJSON-Android/APIJSONTest/app/src/main/java/apijson/demo/ui/UnitActivity.java @@ -0,0 +1,180 @@ +package apijson.demo.ui; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.koushikdutta.async.AsyncServer; +import com.koushikdutta.async.http.Headers; +import com.koushikdutta.async.http.body.AsyncHttpRequestBody; +import com.koushikdutta.async.http.server.AsyncHttpServer; +import com.koushikdutta.async.http.server.AsyncHttpServerRequest; +import com.koushikdutta.async.http.server.AsyncHttpServerResponse; +import com.koushikdutta.async.http.server.HttpServerRequestCallback; + +import org.json.JSONException; +import org.json.JSONObject; + +import apijson.demo.R; +import apijson.demo.StringUtil; + + +public class UnitActivity extends Activity implements HttpServerRequestCallback { + private static final String TAG = "UnitActivity"; + + /** + * @param context + * @return + */ + public static Intent createIntent(Context context) { + return new Intent(context, UnitActivity.class); + } + + + private AsyncHttpServer server = new AsyncHttpServer(); + private AsyncServer mAsyncServer = new AsyncServer(); + + private Activity context; + private boolean isAlive; + + private TextView etUnitPort; + private TextView tvUnitRequest; + private TextView tvUnitResponse; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.unit_activity); + context = this; + isAlive = true; + + etUnitPort = findViewById(R.id.etUnitPort); + tvUnitRequest = findViewById(R.id.tvUnitRequest); + tvUnitResponse = findViewById(R.id.tvUnitResponse); + etUnitPort.setText(port); + } + + + private String port = "8080"; + public void start(View v) { + v.setEnabled(false); + port = StringUtil.getString(etUnitPort); + + etUnitPort.setText(port + " is starting..."); + startServer(); + + etUnitPort.setText(port + " is listening..."); + etUnitPort.setEnabled(false); + v.setEnabled(true); + } + public void stop(View v) { + v.setEnabled(false); + server.stop(); + mAsyncServer.stop(); + + etUnitPort.setText(port); + etUnitPort.setEnabled(true); + v.setEnabled(true); + } + + + public void copy(View v) { + StringUtil.copyText(context, StringUtil.getString((TextView) v)); + } + + private void startServer() { +// server.addAction("OPTIONS","*", this); +// server.get("/test", new HttpServerRequestCallback() { +// @Override +// public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) { +// response.send("{\"hello\": \"world!\"}"); +// } +// }); + +// server.post("/get", this); + server.addAction("OPTIONS", "[\\d\\D]*", this); + server.get("[\\d\\D]*", this); +// server.post("/get", this); + server.post("[\\d\\D]*", this); + server.listen(mAsyncServer, Integer.valueOf(port)); + + } + + @Override + public void onRequest(final AsyncHttpServerRequest asyncHttpServerRequest, final AsyncHttpServerResponse asyncHttpServerResponse) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + if (isAlive) { + tvUnitRequest.setText(StringUtil.getString(asyncHttpServerRequest) + "\n\n\n\n\n" + StringUtil.getString(tvUnitRequest)); + } + } + }); + + AsyncHttpRequestBody requestBody = asyncHttpServerRequest.getBody(); + + Headers allHeaders = asyncHttpServerResponse.getHeaders(); + Headers reqHeaders = asyncHttpServerRequest.getHeaders(); + + String corsHeaders = reqHeaders.get("access-control-request-headers"); + String corsMethod = reqHeaders.get("access-control-request-method"); + +// if ("OPTIONS".toLowerCase().equals(asyncHttpServerRequest.getMethod().toLowerCase())) { + + String origin = reqHeaders.get("origin"); + String cookie = reqHeaders.get("cookie"); + + allHeaders.set("Access-Control-Allow-Origin", TextUtils.isEmpty(origin) ? "*" : origin); + allHeaders.set("Access-Control-Allow-Credentials", "true"); + allHeaders.set("Access-Control-Allow-Headers", TextUtils.isEmpty(corsHeaders) ? "*" : corsHeaders); + allHeaders.set("Access-Control-Allow-Methods", TextUtils.isEmpty(corsMethod) ? "*" : corsMethod); + allHeaders.set("Access-Control-Max-Age", "86400"); + if (TextUtils.isEmpty(cookie) == false) { + allHeaders.set("Set-Cookie", cookie + System.currentTimeMillis()); + } +// } + + try { + JSONObject obj = new JSONObject(); + obj.put("code", 200); + obj.put("msg", "success"); + asyncHttpServerResponse.code(200); + + switch (asyncHttpServerRequest.getPath()) { + case "/invokeMethod": + obj.put("api", "/invokeMethod"); + break; + case "/listMethod": + obj.put("api", "/listMethod"); + break; + } + + asyncHttpServerResponse.send("OPTIONS".toLowerCase().equals(asyncHttpServerRequest.getMethod().toLowerCase()) ? new JSONObject() : obj); +// asyncHttpServerResponse.send("application/json; charset=utf-8", obj.toString()); + + runOnUiThread(new Runnable() { + + @Override + public void run() { + if (isAlive) { + tvUnitResponse.setText(StringUtil.getString(asyncHttpServerResponse) + "\n\n\n\n\n" + StringUtil.getString(tvUnitResponse)); + } + } + }); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + @Override + protected void onDestroy() { + isAlive = false; + super.onDestroy(); + } + + +} diff --git a/APIJSON-Android/APIJSONTest/app/src/main/res/layout/select_activity.xml b/APIJSON-Android/APIJSONTest/app/src/main/res/layout/select_activity.xml index 471c83490..2dda44284 100644 --- a/APIJSON-Android/APIJSONTest/app/src/main/res/layout/select_activity.xml +++ b/APIJSON-Android/APIJSONTest/app/src/main/res/layout/select_activity.xml @@ -104,6 +104,12 @@ android:onClick="toAuto" android:text="@string/auto" /> +