This commit is contained in:
Redkale
2017-05-13 16:40:26 +08:00
parent df3a1ef84d
commit bee4f31323
4 changed files with 48 additions and 8 deletions

View File

@@ -174,7 +174,7 @@ public class NodeHttpServer extends NodeServer {
if (!autoload && !includeValues.contains(stypename)) return;
if (!restFilter.accept(stypename)) return;
HttpServlet servlet = httpServer.addRestServlet(name, stype, service, baseServletClass, prefix, (AnyValue) null);
HttpServlet servlet = httpServer.addRestServlet(name, stype, service, baseServletClass, mustsign, prefix, (AnyValue) null);
resourceFactory.inject(servlet, NodeHttpServer.this);
if (finest) logger.finest(threadName + " Create RestServlet(resource.name='" + name + "') = " + servlet);
if (ss != null) {

View File

@@ -41,18 +41,38 @@ public class HttpResult<T> {
this.result = result;
}
public HttpResult<T> addHeader(String name, Serializable value) {
public HttpResult<T> header(String name, Serializable value) {
if (this.headers == null) this.headers = new HashMap<>();
this.headers.put(name, String.valueOf(value));
return this;
}
public HttpResult<T> addCookie(HttpCookie cookie) {
public HttpResult<T> cookie(HttpCookie cookie) {
if (this.cookies == null) this.cookies = new ArrayList<>();
this.cookies.add(cookie);
return this;
}
public HttpResult<T> contentType(String contentType) {
this.contentType = contentType;
return this;
}
public HttpResult<T> result(T result) {
this.result = result;
return this;
}
public HttpResult<T> status(int status) {
this.status = status;
return this;
}
public HttpResult<T> message(String message) {
this.message = message;
return this;
}
public Map<String, String> getHeaders() {
return headers;
}

View File

@@ -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, prefix, null);
return addRestServlet(name, serviceType, service, baseServletClass, true, prefix, null);
}
/**
@@ -115,13 +115,32 @@ 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 String prefix, AnyValue conf) {
final String name, Class<S> serviceType, final S service, final Class<T> baseServletClass, final boolean mustsign, final String prefix, AnyValue conf) {
T servlet = null;
for (final HttpServlet item : ((HttpPrepareServlet) this.prepare).getServlets()) {
if (!(item instanceof HttpServlet)) continue;
@@ -138,7 +157,7 @@ public final class HttpServer extends Server<String, HttpContext, HttpRequest, H
}
}
final boolean first = servlet == null;
if (servlet == null) servlet = Rest.createRestServlet(baseServletClass, serviceType);
if (servlet == null) servlet = Rest.createRestServlet(baseServletClass, serviceType, mustsign);
try { //若提供动态变更Service服务功能则改Rest服务无法做出相应更新
Field field = servlet.getClass().getDeclaredField(Rest.REST_SERVICE_FIELD_NAME);
field.setAccessible(true);

View File

@@ -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) {
static <T extends HttpServlet> T createRestServlet(final Class<T> baseServletClass, final Class<? extends Service> serviceType, final boolean mustsign) {
if (baseServletClass == null || serviceType == null) return null;
if (!HttpServlet.class.isAssignableFrom(baseServletClass)) return null;
int mod = baseServletClass.getModifiers();
@@ -223,6 +223,7 @@ public final class Rest {
if ("version".equals(method.getName())) continue;
RestMapping[] mappings = method.getAnnotationsByType(RestMapping.class);
if (mustsign && mappings.length < 1) continue;
boolean ignore = false;
for (RestMapping mapping : mappings) {
if (mapping.ignore()) {
@@ -770,7 +771,7 @@ public final class Rest {
RestSessionid rs = field.getAnnotation(RestSessionid.class);
RestAddress ra = field.getAnnotation(RestAddress.class);
RestBody rb = field.getAnnotation(RestBody.class);
if (rh == null && rc == null && ra == null && rb == null) continue;
if (rh == null && rc == null && ra == null && rb == null && rs == null) continue;
if (rh != null && field.getType() != String.class) throw new RuntimeException("@RestHeader must on String Field in " + field);
if (rc != null && field.getType() != String.class) throw new RuntimeException("@RestCookie must on String Field in " + field);
if (rs != null && field.getType() != String.class) throw new RuntimeException("@RestSessionid must on String Field in " + field);