This commit is contained in:
@@ -136,11 +136,10 @@
|
||||
当Server为HTTP协议时, rest节点才有效。存在[rest]节点则Server启动时会加载REST服务, 节点可以多个
|
||||
base: REST服务的BaseServlet,必须是 org.redkale.net.http.HttpServlet 的子类,且子类必须标记@HttpUserType。
|
||||
autoload:默认值"true" 默认值. 加载当前server所能使用的Servce对象;
|
||||
mustsign:默认值"true" 是否只加载标记为RestService的Service类,默认只加载标记RestService且ignore=false的Service
|
||||
includes:当autoload="true", 拉取类名与includes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
|
||||
excludes:当autoload="true", 排除类名与excludes中的正则表达式匹配的类, 多个正则表达式用分号;隔开
|
||||
-->
|
||||
<rest base="org.redkale.net.http.HttpServlet" mustsign="true" autoload="true" includes="" excludes="">
|
||||
<rest base="org.redkale.net.http.HttpServlet" autoload="true" includes="" excludes="">
|
||||
<!--
|
||||
value: Service类名,列出的表示必须被加载的Service对象
|
||||
ignore: 是否忽略,设置为true则不会加载该Service对象,默认值为false
|
||||
|
||||
@@ -148,7 +148,6 @@ public class NodeHttpServer extends NodeServer {
|
||||
final Class baseServletClass = Class.forName(restConf.getValue("base", DefaultRestServlet.class.getName()));
|
||||
|
||||
final boolean autoload = restConf.getBoolValue("autoload", true);
|
||||
final boolean mustsign = restConf.getBoolValue("mustsign", true); //是否只加载标记@RestService的Service类
|
||||
|
||||
final Set<String> includeValues = new HashSet<>();
|
||||
final Set<String> excludeValues = new HashSet<>();
|
||||
@@ -166,15 +165,13 @@ public class NodeHttpServer extends NodeServer {
|
||||
final Class stype = Sncp.getServiceType(service);
|
||||
final String name = Sncp.getResourceName(service);
|
||||
RestService rs = (RestService) stype.getAnnotation(RestService.class);
|
||||
if (rs != null && rs.ignore()) return;
|
||||
if (mustsign && rs == null) return;
|
||||
if (stype.getAnnotation(Local.class) != null && rs == null) return;
|
||||
if (rs == null || rs.ignore()) return;
|
||||
|
||||
final String stypename = stype.getName();
|
||||
if (!autoload && !includeValues.contains(stypename)) return;
|
||||
if (!restFilter.accept(stypename)) return;
|
||||
|
||||
HttpServlet servlet = httpServer.addRestServlet(name, stype, service, baseServletClass, mustsign, prefix, (AnyValue) null);
|
||||
HttpServlet servlet = httpServer.addRestServlet(name, stype, service, baseServletClass, prefix, (AnyValue) null);
|
||||
resourceFactory.inject(servlet, NodeHttpServer.this);
|
||||
if (finest) logger.finest(threadName + " Create RestServlet(resource.name='" + name + "') = " + servlet);
|
||||
if (ss != null) {
|
||||
|
||||
@@ -103,7 +103,7 @@ public final class HttpServer extends Server<String, HttpContext, HttpRequest, H
|
||||
* @return RestServlet
|
||||
*/
|
||||
public <S extends Service, T extends HttpServlet> T addRestServlet(String name, Class<S> serviceType, S service, Class<T> baseServletClass, String prefix) {
|
||||
return addRestServlet(name, serviceType, service, baseServletClass, true, prefix, null);
|
||||
return addRestServlet(name, serviceType, service, baseServletClass, prefix, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,32 +115,13 @@ public final class HttpServer extends Server<String, HttpContext, HttpRequest, H
|
||||
* @param serviceType Service的类型
|
||||
* @param service Service对象
|
||||
* @param baseServletClass RestServlet基类
|
||||
* @param mustsign 是否必须有Rest注解标记才生成Rest方法
|
||||
* @param prefix url前缀
|
||||
*
|
||||
* @return RestServlet
|
||||
*/
|
||||
public <S extends Service, T extends HttpServlet> T addRestServlet(String name, Class<S> serviceType, S service, Class<T> baseServletClass, final boolean mustsign, String prefix) {
|
||||
return addRestServlet(name, serviceType, service, baseServletClass, mustsign, prefix, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加RestServlet
|
||||
*
|
||||
* @param <S> Service
|
||||
* @param <T> RestServlet
|
||||
* @param name Service的资源名
|
||||
* @param serviceType Service的类型
|
||||
* @param service Service对象
|
||||
* @param baseServletClass RestServlet基类
|
||||
* @param mustsign 是否必须有Rest注解标记才生成Rest方法
|
||||
* @param prefix url前缀
|
||||
* @param conf 配置信息
|
||||
*
|
||||
* @return RestServlet
|
||||
*/
|
||||
public <S extends Service, T extends HttpServlet> T addRestServlet(
|
||||
final String name, Class<S> serviceType, final S service, final Class<T> baseServletClass, final boolean mustsign, final String prefix, AnyValue conf) {
|
||||
public <S extends Service, T extends HttpServlet> T addRestServlet(final String name, final Class<S> serviceType,
|
||||
final S service, final Class<T> baseServletClass, final String prefix, final AnyValue conf) {
|
||||
T servlet = null;
|
||||
for (final HttpServlet item : ((HttpPrepareServlet) this.prepare).getServlets()) {
|
||||
if (!(item instanceof HttpServlet)) continue;
|
||||
@@ -157,7 +138,7 @@ public final class HttpServer extends Server<String, HttpContext, HttpRequest, H
|
||||
}
|
||||
}
|
||||
final boolean first = servlet == null;
|
||||
if (servlet == null) servlet = Rest.createRestServlet(baseServletClass, serviceType, mustsign);
|
||||
if (servlet == null) servlet = Rest.createRestServlet(baseServletClass, serviceType);
|
||||
try { //若提供动态变更Service服务功能,则改Rest服务无法做出相应更新
|
||||
Field field = servlet.getClass().getDeclaredField(Rest.REST_SERVICE_FIELD_NAME);
|
||||
field.setAccessible(true);
|
||||
|
||||
@@ -104,7 +104,7 @@ public final class Rest {
|
||||
return (!controller.name().isEmpty()) ? controller.name() : serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase();
|
||||
}
|
||||
|
||||
static <T extends HttpServlet> T createRestServlet(final Class<T> baseServletClass, final Class<? extends Service> serviceType, final boolean mustsign) {
|
||||
static <T extends HttpServlet> T createRestServlet(final Class<T> baseServletClass, final Class<? extends Service> serviceType) {
|
||||
if (baseServletClass == null || serviceType == null) return null;
|
||||
if (!HttpServlet.class.isAssignableFrom(baseServletClass)) return null;
|
||||
int mod = baseServletClass.getModifiers();
|
||||
@@ -223,7 +223,8 @@ public final class Rest {
|
||||
if ("version".equals(method.getName())) continue;
|
||||
|
||||
RestMapping[] mappings = method.getAnnotationsByType(RestMapping.class);
|
||||
if (mustsign && mappings.length < 1) continue;
|
||||
if (controller == null) continue;
|
||||
if (!controller.automapping() && mappings.length < 1) continue;
|
||||
boolean ignore = false;
|
||||
for (RestMapping mapping : mappings) {
|
||||
if (mapping.ignore()) {
|
||||
|
||||
@@ -36,6 +36,13 @@ public @interface RestService {
|
||||
*/
|
||||
int moduleid() default 0;
|
||||
|
||||
/**
|
||||
* 没有标记@RestMapping的方法是否转换, 默认为false
|
||||
*
|
||||
* @return 默认false
|
||||
*/
|
||||
boolean automapping() default false;
|
||||
|
||||
/**
|
||||
* 是否屏蔽该类的转换
|
||||
*
|
||||
|
||||
@@ -18,7 +18,7 @@ import org.redkale.util.*;
|
||||
* HelloBean: Hello模块实现FilterBean的过滤Bean类
|
||||
*
|
||||
*/
|
||||
@RestService
|
||||
@RestService(automapping = true)
|
||||
public class HelloService implements Service {
|
||||
|
||||
private int nodeid;
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.redkale.util.Sheet;
|
||||
* HelloBean: Hello模块实现FilterBean的过滤Bean类
|
||||
*
|
||||
*/
|
||||
@RestService(name = "hello", moduleid = 0, repair = true, ignore = false, comment = "Hello服务模块")
|
||||
@RestService(name = "hello", moduleid = 0, automapping = true, repair = true, ignore = false, comment = "Hello服务模块")
|
||||
public class HelloService2 implements Service {
|
||||
|
||||
@Resource
|
||||
|
||||
Reference in New Issue
Block a user