|
@@ -6,12 +6,10 @@ import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
-import org.springframework.web.context.request.NativeWebRequest;
|
|
|
|
-import org.springframework.web.context.request.RequestAttributes;
|
|
|
|
-import org.springframework.web.context.request.ServletWebRequest;
|
|
|
|
-import org.springframework.web.servlet.HandlerMapping;
|
|
|
|
import org.ssssssss.context.RequestContext;
|
|
import org.ssssssss.context.RequestContext;
|
|
|
|
+import org.ssssssss.exception.S8Exception;
|
|
import org.ssssssss.expression.ExpressionEngine;
|
|
import org.ssssssss.expression.ExpressionEngine;
|
|
|
|
+import org.ssssssss.interceptor.RequestInterceptor;
|
|
import org.ssssssss.model.JsonBean;
|
|
import org.ssssssss.model.JsonBean;
|
|
import org.ssssssss.session.Configuration;
|
|
import org.ssssssss.session.Configuration;
|
|
import org.ssssssss.session.Statement;
|
|
import org.ssssssss.session.Statement;
|
|
@@ -25,6 +23,7 @@ import org.w3c.dom.NodeList;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.xml.xpath.XPathConstants;
|
|
import javax.xml.xpath.XPathConstants;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
@@ -38,8 +37,11 @@ public class RequestExecutor {
|
|
private ExpressionEngine expressionEngine;
|
|
private ExpressionEngine expressionEngine;
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(RequestExecutor.class);
|
|
private static Logger logger = LoggerFactory.getLogger(RequestExecutor.class);
|
|
|
|
+
|
|
private Map<String, IValidator> validators = new HashMap<>();
|
|
private Map<String, IValidator> validators = new HashMap<>();
|
|
|
|
|
|
|
|
+ private List<RequestInterceptor> requestInterceptors = new ArrayList<>();
|
|
|
|
+
|
|
public void addValidator(IValidator validator) {
|
|
public void addValidator(IValidator validator) {
|
|
this.validators.put(validator.support(), validator);
|
|
this.validators.put(validator.support(), validator);
|
|
}
|
|
}
|
|
@@ -58,33 +60,54 @@ public class RequestExecutor {
|
|
|
|
|
|
/**
|
|
/**
|
|
* http请求入口
|
|
* http请求入口
|
|
|
|
+ *
|
|
|
|
+ * @param request
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public Object invoke(HttpServletRequest request) {
|
|
|
|
+ return invoke(request, null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * http请求入口(带RequestBody)
|
|
*/
|
|
*/
|
|
@ResponseBody
|
|
@ResponseBody
|
|
public Object invoke(HttpServletRequest request, @RequestBody(required = false) Object requestBody) {
|
|
public Object invoke(HttpServletRequest request, @RequestBody(required = false) Object requestBody) {
|
|
try {
|
|
try {
|
|
- NativeWebRequest webRequest = new ServletWebRequest(request);
|
|
|
|
- // 解析requestMapping
|
|
|
|
- String requestMapping = (String) webRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
|
|
|
|
- // 解析pathVariable
|
|
|
|
- Map<String, String> pathVariables = (Map<String, String>) webRequest.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
|
|
|
|
// 创建RequestContex对象,供后续使用
|
|
// 创建RequestContex对象,供后续使用
|
|
RequestContext requestContext = new RequestContext(request, expressionEngine);
|
|
RequestContext requestContext = new RequestContext(request, expressionEngine);
|
|
if (!requestContext.containsKey("body")) {
|
|
if (!requestContext.containsKey("body")) {
|
|
- requestContext.put("body", requestBody);
|
|
|
|
|
|
+ requestContext.setRequestBody(requestBody);
|
|
}
|
|
}
|
|
- if (pathVariables != null) {
|
|
|
|
- requestContext.putAll(pathVariables);
|
|
|
|
|
|
+ Statement statement = configuration.getStatement(requestContext.getRequestMapping());
|
|
|
|
+ requestContext.setStatement(statement);
|
|
|
|
+ // 执行前置拦截器
|
|
|
|
+ for (RequestInterceptor requestInterceptor : requestInterceptors) {
|
|
|
|
+ Object value = requestInterceptor.preHandle(requestContext);
|
|
|
|
+ if (value != null) {
|
|
|
|
+ return value;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- Statement statement = configuration.getStatement(requestMapping);
|
|
|
|
// 执行校验
|
|
// 执行校验
|
|
Object value = validate(statement, requestContext);
|
|
Object value = validate(statement, requestContext);
|
|
if (value != null) {
|
|
if (value != null) {
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|
|
- // 执行SQL
|
|
|
|
- value = statementExecutor.execute(statement, requestContext);
|
|
|
|
- return new JsonBean<>(value);
|
|
|
|
|
|
+ // 执行语句
|
|
|
|
+ value = new JsonBean<>(statementExecutor.execute(statement, requestContext));
|
|
|
|
+ // 执行后置拦截器
|
|
|
|
+ for (RequestInterceptor requestInterceptor : requestInterceptors) {
|
|
|
|
+ Object target = requestInterceptor.postHandle(requestContext, value);
|
|
|
|
+ if (target != null) {
|
|
|
|
+ return target;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return value;
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
|
+ if (configuration.isThrowException()) {
|
|
|
|
+ throw new S8Exception("ssssssss执行出错", e);
|
|
|
|
+ }
|
|
logger.error("系统出现错误", e);
|
|
logger.error("系统出现错误", e);
|
|
return new JsonBean<>(-1, e.getMessage());
|
|
return new JsonBean<>(-1, e.getMessage());
|
|
}
|
|
}
|