From cf7102978da40cc66e096410767fd651a997f91f Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Mon, 29 May 2017 19:19:38 +0800 Subject: [PATCH] --- service.html | 131 +++++++++++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 71 deletions(-) diff --git a/service.html b/service.html index 482c7b620..5e9a6b7b9 100644 --- a/service.html +++ b/service.html @@ -87,21 +87,11 @@
动态生成的本地模式UserService:
-@Resource(name = "")
+ @Resource(name = "")
@SncpDyn(remote = false)
-@ResourceType(UserService.class)
+@ResourceType(UserService.class)
public final class _DynLocalUserService extends UserService {
- @Resource
- private BsonConvert _redkale_bsonConvert;
-
- @Resource
- private JsonConvert _redkale_jsonConvert;
-
- private Transport _redkale_sameGroupTransport;
-
- private Transport[] _redkale_diffGroupTransports;
-
private SncpClient _redkale_client;
private String _redkale_selfstring;
@@ -113,28 +103,28 @@
@Override
public void register(UserInfo user) {
- this._redkale_register(true, true, true, user);
+ this._redkale_register(true, true, true, user);
}
@SncpDyn(remote = false, index = 0)
public void _redkale_register(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, UserInfo user) {
if (selfrunnable) super.register(user);
if (_redkale_client == null) return;
- if (samerunnable) _redkale_client.remoteSameGroup(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_sameGroupTransport, 0, true, false, false, user);
- if (diffrunnable) _redkale_client.remoteDiffGroup(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_diffGroupTransports, 0, true, true, false, user);
+ if (samerunnable) _redkale_client.remoteSameGroup(0, true, false, false, user);
+ if (diffrunnable) _redkale_client.remoteDiffGroup(0, true, true, false, user);
}
@Override
public UserInfo updateUsername(int userid, String username) {
- return this._redkale_updateUsername(true, true, false, userid, username);
+ return this._redkale_updateUsername(true, true, false, userid, username);
}
@SncpDyn(remote = false, index = 1)
public UserInfo _redkale_updateUsername(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, int userid, String username) {
UserInfo rs = super.updateUsername(userid, username);
if (_redkale_client == null) return null;
- if (samerunnable) _redkale_client.remoteSameGroup(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_sameGroupTransport, 1, true, false, false, userid, username);
- if (diffrunnable) _redkale_client.remoteDiffGroup(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_diffGroupTransports, 1, true, true, false, userid, username);
+ if (samerunnable) _redkale_client.remoteSameGroup(1, true, false, false, userid, username);
+ if (diffrunnable) _redkale_client.remoteDiffGroup(1, true, true, false, userid, username);
return rs;
}
}
@@ -175,66 +165,51 @@
Service 远程模式
动态生成的远程模式UserService:
- @Resource(name = "")
+ @Resource(name = "")
@SncpDyn(remote = true)
@ResourceType(UserService.class)
public final class _DynRemoteUserService extends UserService {
- @Resource
- private BsonConvert _redkale_bsonConvert;
-
- @Resource
- private JsonConvert _redkale_jsonConvert;
-
- private Transport _redkale_transport;
-
private SncpClient _redkale_client;
- private String _redkale_selfstring;
-
- @Override
- public String toString() {
- return _redkale_selfstring == null ? super.toString() : _redkale_selfstring;
- }
-
@SncpDyn(remote = false, index = 0)
public void _redkale_register(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, UserInfo user) {
- _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 0, selfrunnable, samerunnable, diffrunnable, user);
+ _redkale_client.remote(0, selfrunnable, samerunnable, diffrunnable, user);
}
@SncpDyn(remote = false, index = 1)
public UserInfo _redkale_updateUsername(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, int userid, String username) {
- return _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 1, selfrunnable, samerunnable, diffrunnable, userid, username);
+ return _redkale_client.remote(1, selfrunnable, samerunnable, diffrunnable, userid, username);
}
@Override
public UserInfo findUserInfo(int userid) {
- return _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 2, userid);
+ return _redkale_client.remote(2, userid);
}
@Override
public int findUserid(long mobile) {
- return _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 3, mobile);
+ return _redkale_client.remote(3, mobile);
}
@Override
public RetResult<UserInfo> login(LoginBean bean) {
- return _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 4, bean);
+ return _redkale_client.remote(4, bean);
}
@Override
public void putUserInfo(UserInfo user) {
- _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 5, user);
+ _redkale_client.remote(5, user);
}
@Override
public void register(UserInfo user) {
- _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 6, user);
+ _redkale_client.remote(6, user);
}
@Override
public UserInfo updateUsername(int userid, String username) {
- return _redkale_client.remote(_redkale_bsonConvert, _redkale_jsonConvert, _redkale_transport, 7, userid, username);
+ return _redkale_client.remote(7, userid, username);
}
}
@@ -295,10 +270,10 @@
@RestService :
/**
- * 只能依附在Service类上,name默认为Service的类名小写并去掉Service字样及后面的字符串
- * (如HelloService/HelloServiceImpl,的默认路径为 hello)。
+ * 只能依附在Service类上,name默认为Service的类名小写并去掉Service字样及后面的字符串 (如HelloService/HelloServiceImpl,的默认路径为 hello)。
*/
@Target({TYPE})
+@Retention(RUNTIME)
public @interface RestService {
/**
@@ -306,15 +281,29 @@
*
* @return 模块名
*/
- String name() default "";
+ String name() default "";
/**
- * 模块ID值,鉴权时用到, 对应@WebServlet.moduleid
+ * 目录名, 不能含特殊字符, 只能小写字母+数字,且不能以数字开头
+ *
+ * @return 目录名
+ */
+ String catalog() default "";
+
+ /**
+ * 模块ID值,鉴权时用到, 对应@WebServlet.moduleid
*
* @return 模块ID值
*/
int moduleid() default 0;
+ /**
+ * 没有标记@RestMapping的方法是否转换, 默认为false
+ *
+ * @return 默认false
+ */
+ boolean automapping() default false;
+
/**
* 是否屏蔽该类的转换
*
@@ -323,7 +312,7 @@
boolean ignore() default false;
/**
- * 同@WebServlet.repair
+ * 同@WebServlet的repair属性
*
* @return 默认true
*/
@@ -334,7 +323,7 @@
*
* @return 备注描述
*/
- String comment() default "";
+ String comment() default "";
}
@@ -356,7 +345,7 @@
String comment() default ""; //备注描述, 对应@HttpMapping.comment
- boolean auth() default true; //是否鉴权,默认不鉴权, 对应@HttpMapping.auth
+ boolean auth() default true; //是否鉴权,默认需要鉴权, 对应@HttpMapping.auth
int cacheseconds() default 0; //结果缓存的秒数, 为0表示不缓存, 对应@HttpMapping.cacheseconds
@@ -383,28 +372,28 @@
int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制
- boolean required() default 0; //参数是否必传
+ boolean required() default true; //参数是否必传
String comment() default ""; //备注描述, 对应@HttpMapping.comment
}
开启REST功能的步骤很简单:在 application.xml 的 <server> 节点下增加<rest>指明RestServlet的子类。
-
- <!--
- REST的核心配置项, 存在[rest]节点则Server启动时会加载REST服务, 当Server为SNCP协议时,则SncpServer会变成REST的HttpServer, 节点可以多个
- base: REST服务的BaseServlet,必须是org.redkale.net.http.HttpServlet的子类,且子类必须标记 @HttpUserType。
- autoload:默认值"true" 默认值. 加载当前server所能使用的Servce对象;
- includes:当autoload="true", 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
- excludes:当autoload="true", 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
- -->
- <rest base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
- <!--
- value: Service类名,列出的表示必须被加载的Service对象
- ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false
- -->
- <service value="com.xxx.XXXXService"/>
- </rest>
+ <!--
+ REST的核心配置项, 存在[rest]节点则Server启动时会加载REST服务, 当Server为SNCP协议时,则SncpServer会变成REST的HttpServer, 节点可以多个
+ path: servlet的ContextPath前缀 默认为空
+ base: REST服务的BaseServlet,必须是org.redkale.net.http.HttpServlet的子类,且子类必须标记 @HttpUserType。
+ autoload:默认值"true" 默认值. 加载当前server所能使用的Servce对象;
+ includes:当autoload="true", 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
+ excludes:当autoload="true", 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
+-->
+<rest path="/pipes" base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
+ <!--
+ value: Service类名,列出的表示必须被加载的Service对象
+ ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false
+ -->
+ <service value="com.xxx.XXXXService"/>
+</rest>
Redkale中的REST并非严格遵循标准的REST规范,在尽量满足规范的同时也考虑到开发的灵活性和简易性。以下通过简单的实例来说明其特性。
@@ -559,7 +548,7 @@
@Resource
private Map<String, HelloService> _servicemap;
- @HttpMapping(url = "/hello/create", comment = "创建Hello对象")
+ @HttpMapping(url = "/hello/create", auth = false, comment = "创建Hello对象")
@HttpParam(name = "bean", type = HelloEntity.class, comment = "Hello对象")
public void create(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));
@@ -571,7 +560,7 @@
resp.finishJson(result);
}
- @HttpMapping(url = "/hello/delete/", comment = "根据id删除Hello对象")
+ @HttpMapping(url = "/hello/delete/", auth = false, comment = "根据id删除Hello对象")
@HttpParam(name = "#", type = int.class, comment = "Hello对象id")
public void delete(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));
@@ -580,7 +569,7 @@
resp.finishJson(RetResult.success());
}
- @HttpMapping(url = "/hello/update", comment = "修改Hello对象")
+ @HttpMapping(url = "/hello/update", auth = false, comment = "修改Hello对象")
@HttpParam(name = "bean", type = HelloEntity.class, comment = "Hello对象")
public void update(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));
@@ -591,7 +580,7 @@
resp.finishJson(RetResult.success());
}
- @HttpMapping(url = "/hello/query", comment = "查询Hello对象列表")
+ @HttpMapping(url = "/hello/query", auth = false, comment = "查询Hello对象列表")
@HttpParam(name = "bean", type = HelloBean.class, comment = "过滤条件")
public void query(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));
@@ -605,7 +594,7 @@
resp.finishJson(result);
}
- @HttpMapping(url = "/hello/find/", comment = "根据id查找单个Hello对象")
+ @HttpMapping(url = "/hello/find/", auth = false, comment = "根据id查找单个Hello对象")
@HttpParam(name = "#", type = int.class, comment = "Hello对象id")
public void find(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));
@@ -614,7 +603,7 @@
resp.finishJson(bean);
}
- @HttpMapping(url = "/hello/asyncfind/", comment = "根据id查找单个Hello对象")
+ @HttpMapping(url = "/hello/asyncfind/", auth = false, comment = "根据id查找单个Hello对象")
@HttpParam(name = "#", type = int.class, comment = "Hello对象id")
public void asyncfind(HttpRequest req, HttpResponse resp) throws IOException {
HelloService service = _servicemap == null ? _service : _servicemap.get(req.getHeader(Rest.REST_HEADER_RESOURCE_NAME, ""));