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值,鉴权时用到, 对应&#64;WebServlet.moduleid
      *
      * @return 模块ID值
      */
     int moduleid() default 0;
 
+    /**
+     * 没有标记&#64;RestMapping的方法是否转换, 默认为false
+     *
+     * @return 默认false
+     */
+    boolean automapping() default false;
+
     /**
      * 是否屏蔽该类的转换
      *
@@ -323,7 +312,7 @@
     boolean ignore() default false;
 
     /**
-     * 同@WebServlet.repair
+     * 同&#64;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, ""));