This commit is contained in:
Redkale
2017-05-12 22:00:01 +08:00
parent e6486a0f6b
commit 53bc4146d4
6 changed files with 45 additions and 45 deletions

View File

@@ -290,7 +290,7 @@
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;生成远程模式Service时发现参数带有@RpcCall注解的方法在远程调用返回结果时会进行回调处理。</p>
<h3><a id="service_rest" class="anchor" href="#" aria-hidden="true"></a>Service REST</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RestService提供类似Spring Boot的功能。开启REST功能的HTTP Server在实例化标记为@RestService的Service后自动生成对应的HttpServlet免去开发人员编写HttpServlet的工作量。RestService生成的HttpServlet均是RestHttpServlet的子类。主要通过<a href="/javadoc/org/redkale/net/http/RestService.html" target="_blank">@RestService</a><a href="/javadoc/org/redkale/net/http/RestMapping.html" target="_blank">@RestMapping</a><a href="/javadoc/org/redkale/net/http/RestParam.html" target="_blank">@RestParam</a>这三个注解来实现,同时为了获取其他类型的参数也有<a href="/javadoc/org/redkale/net/http/RestAddress.html" target="_blank">@RestAddress</a><a href="/javadoc/org/redkale/net/http/RestCookie.html" target="_blank">@RestCookie</a><a href="/javadoc/org/redkale/net/http/RestHeader.html" target="_blank">@RestHeader</a><a href="/javadoc/org/redkale/net/http/RestSessionid.html" target="_blank">@RestSessionid</a><a href="/javadoc/org/redkale/net/http/RestBody.html" target="_blank">@RestBody</a> 提供其扩展功能。<br/></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RestService提供类似Spring Boot的功能。开启REST功能的HTTP Server在实例化标记为@RestService的Service后自动生成对应的HttpServlet免去开发人员编写HttpServlet的工作量。RestService生成的HttpServlet均是RestServlet的子类。主要通过<a href="/javadoc/org/redkale/net/http/RestService.html" target="_blank">@RestService</a><a href="/javadoc/org/redkale/net/http/RestMapping.html" target="_blank">@RestMapping</a><a href="/javadoc/org/redkale/net/http/RestParam.html" target="_blank">@RestParam</a>这三个注解来实现,同时为了获取其他类型的参数也有<a href="/javadoc/org/redkale/net/http/RestAddress.html" target="_blank">@RestAddress</a><a href="/javadoc/org/redkale/net/http/RestCookie.html" target="_blank">@RestCookie</a><a href="/javadoc/org/redkale/net/http/RestHeader.html" target="_blank">@RestHeader</a><a href="/javadoc/org/redkale/net/http/RestSessionid.html" target="_blank">@RestSessionid</a><a href="/javadoc/org/redkale/net/http/RestBody.html" target="_blank">@RestBody</a> 提供其扩展功能。<br/></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;@RestService <br>
</p>
@@ -386,18 +386,18 @@
<span class="n">String</span> <span class="nf">comment</span><span class="o">()</span> <span class="k">default</span> <span class="s">&quot;&quot;</span><span class="o">;</span> <span class="c1">//备注描述, 对应&#64;HttpMapping.comment </span>
<span class="o">}</span>
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开启REST功能的步骤很简单<a href="redkale.html#redkale_confxml" target="_blank">application.xml</a><b>&lt;server&gt;</b> 节点下增加<b>&lt;rest&gt;</b>指明RestHttpServlet的子类。<br/></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开启REST功能的步骤很简单<a href="redkale.html#redkale_confxml" target="_blank">application.xml</a><b>&lt;server&gt;</b> 节点下增加<b>&lt;rest&gt;</b>指明RestServlet的子类。<br/></p>
<div class="highlight"><pre>
<span class="c">&lt;!-- </span>
<span class="c"> REST的核心配置项, 存在[rest]节点则Server启动时会加载REST服务, 当Server为SNCP协议时,则SncpServer会变成REST的HttpServer, 节点可以多个</span>
<span class="c"> base: REST服务的BaseServlet必须是 org.redkale.net.http.RestHttpServlet 的子类,该属性值默认值为 org.redkale.net.http.RestHttpServlet。</span>
<span class="c"> base: REST服务的BaseServlet必须是 org.redkale.net.http.RestServlet 的子类,该属性值默认值为 org.redkale.net.http.RestServlet。</span>
<span class="c"> autoload默认值&quot;true&quot; 默认值. 加载当前server所能使用的Servce对象; </span>
<span class="c"> mustsign默认值&quot;true&quot; 是否只加载标记为RestService的Service类默认只加载标记RestService且ignore=false的Service</span>
<span class="c"> includes当autoload=&quot;true&quot; 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开</span>
<span class="c"> excludes当autoload=&quot;true&quot; 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开</span>
<span class="c"> --&gt;</span>
<span class="nt">&lt;rest</span> <span class="na">base=</span><span class="s">&quot;org.redkale.net.http.RestHttpServlet&quot;</span> <span class="na">mustsign=</span><span class="s">&quot;true&quot;</span> <span class="na">autoload=</span><span class="s">&quot;true&quot;</span> <span class="na">includes=</span><span class="s">&quot;&quot;</span> <span class="na">excludes=</span><span class="s">&quot;&quot;</span><span class="nt">&gt;</span>
<span class="nt">&lt;rest</span> <span class="na">base=</span><span class="s">&quot;org.redkale.net.http.RestServlet&quot;</span> <span class="na">mustsign=</span><span class="s">&quot;true&quot;</span> <span class="na">autoload=</span><span class="s">&quot;true&quot;</span> <span class="na">includes=</span><span class="s">&quot;&quot;</span> <span class="na">excludes=</span><span class="s">&quot;&quot;</span><span class="nt">&gt;</span>
<span class="c">&lt;!-- </span>
<span class="c"> value: Service类名列出的表示必须被加载的Service对象</span>
<span class="c"> ignore: 是否忽略设置为true则不会加载该Service对象默认值为false</span>
@@ -407,9 +407,9 @@
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redkale中的REST并非严格遵循标准的REST规范在尽量满足规范的同时也考虑到开发的灵活性和简易性。以下通过简单的实例来说明其特性。<br/></p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常配置都需要编写一个 <b>org.redkale.net.http.RestHttpServlet</b> 子类主要用于获取当前用户信息和鉴权且必须指定具体的User对象类。开发者的实现类可以参考 <a href="https://github.com/redkale/redkale-demo/tree/master/src/org/redkale/demo/base" target="_blank">redkale-demo</a> 中的BaseServlet类以下是一个简单的范例: <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常配置都需要编写一个 <b>org.redkale.net.http.RestServlet</b> 子类主要用于获取当前用户信息和鉴权且必须指定具体的User对象类。开发者的实现类可以参考 <a href="https://github.com/redkale/redkale-demo/tree/master/src/org/redkale/demo/base" target="_blank">redkale-demo</a> 中的BaseServlet类以下是一个简单的范例: <br>
</p>
<div class="highlight"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">SimpleRestServlet</span> <span class="kd">extends</span> <span class="n">RestHttpServlet</span><span class="o">&lt;</span><span class="n">UserInfo</span><span class="o">&gt;</span> <span class="o">{</span>
<div class="highlight"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">SimpleRestServlet</span> <span class="kd">extends</span> <span class="n">RestServlet</span><span class="o">&lt;</span><span class="n">UserInfo</span><span class="o">&gt;</span> <span class="o">{</span>
<span class="kd">protected</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">RetResult</span> <span class="n">RET_UNLOGIN</span> <span class="o">=</span> <span class="n">RetCodes</span><span class="o">.</span><span class="na">retResult</span><span class="o">(</span><span class="n">RetCodes</span><span class="o">.</span><span class="na">RET_USER_UNLOGIN</span><span class="o">);</span>
@@ -560,7 +560,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/create&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;创建Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">create</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="n">HelloEntity</span> <span class="n">bean</span> <span class="o">=</span> <span class="n">req</span><span class="o">.</span><span class="na">getJsonParameter</span><span class="o">(</span><span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="s">&quot;bean&quot;</span><span class="o">);</span>
@@ -573,7 +573,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/delete/&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;根据id删除Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">delete</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="kt">int</span> <span class="n">id</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRequstURILastPath</span><span class="o">());</span>
@@ -583,7 +583,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/update&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;修改Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">update</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="n">HelloEntity</span> <span class="n">bean</span> <span class="o">=</span> <span class="n">req</span><span class="o">.</span><span class="na">getJsonParameter</span><span class="o">(</span><span class="n">HelloEntity</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="s">&quot;bean&quot;</span><span class="o">);</span>
@@ -595,7 +595,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/query&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;查询Hello对象列表&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloBean</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;过滤条件&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;bean&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="n">HelloBean</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;过滤条件&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">query</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="n">HelloBean</span> <span class="n">bean</span> <span class="o">=</span> <span class="n">req</span><span class="o">.</span><span class="na">getJsonParameter</span><span class="o">(</span><span class="n">HelloBean</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="s">&quot;bean&quot;</span><span class="o">);</span>
@@ -610,7 +610,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/find/&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;根据id查找单个Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">find</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="kt">int</span> <span class="n">id</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRequstURILastPath</span><span class="o">());</span>
@@ -620,7 +620,7 @@
<span class="nd">@AuthIgnore</span>
<span class="nd">@HttpMapping</span><span class="o">(</span><span class="n">url</span> <span class="o">=</span> <span class="s">&quot;/hello/asyncfind/&quot;</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;根据id查找单个Hello对象&quot;</span><span class="o">)</span>
<span class="nd">@WebParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="nd">@HttpParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;#&quot;</span><span class="o">,</span> <span class="n">type</span> <span class="o">=</span> <span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">comment</span> <span class="o">=</span> <span class="s">&quot;Hello对象id&quot;</span><span class="o">)</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">asyncfind</span><span class="o">(</span><span class="n">HttpRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
<span class="n">HelloService</span> <span class="n">service</span> <span class="o">=</span> <span class="n">_servicemap</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">_service</span> <span class="o">:</span> <span class="n">_servicemap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">Rest</span><span class="o">.</span><span class="na">REST_HEADER_RESOURCE_NAME</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">));</span>
<span class="kt">int</span> <span class="n">id</span> <span class="o">=</span> <span class="n">Integer</span><span class="o">.</span><span class="na">parseInt</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRequstURILastPath</span><span class="o">());</span>