use of org.axe.bean.mvc.Data in project Axe by DongyuCai.
the class DispatcherServlet method service.
@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
String contentType = ContentType.APPLICATION_JSON.CONTENT_TYPE;
String characterEncoding = CharacterEncoding.UTF_8.CHARACTER_ENCODING;
List<Filter> doEndFilterList = null;
try {
//获取请求方法与请求路径
String requestMethod = RequestUtil.getRequestMethod(request);
String requestPath = RequestUtil.getRequestPath(request);
if (requestPath != null && requestPath.equals("/favicon.ico")) {
return;
}
//获取 Action 处理器
Handler handler = ControllerHelper.getHandler(requestMethod, requestPath);
if (handler != null) {
//获取 Controller 类和 Bean 实例
Class<?> controllerClass = handler.getControllerClass();
Method actionMethod = handler.getActionMethod();
Object controllerBean = BeanHelper.getBean(controllerClass);
contentType = handler.getContentType();
characterEncoding = handler.getCharacterEncoding();
//##1.创建你请求参数对象
Param param;
if (FormRequestHelper.isMultipart(request)) {
//如果是文件上传
param = FormRequestHelper.createParam(request, requestPath, handler.getMappingPath());
} else {
//如果不是
param = AjaxRequestHelper.createParam(request, requestPath, handler.getMappingPath());
}
// List<Object> actionParamList = this.convertRequest2RequestParam(actionMethod, param, request, response);
// param.setActionParamList(actionParamList);
//##2.先执行Filter链
List<Filter> filterList = handler.getFilterList();
boolean doFilterSuccess = true;
if (CollectionUtil.isNotEmpty(filterList)) {
for (Filter filter : filterList) {
//被执行的Filter,都添加到end任务里
if (doEndFilterList == null) {
doEndFilterList = new ArrayList<>();
}
doEndFilterList.add(filter);
doFilterSuccess = filter.doFilter(request, response, param, handler);
//执行失败则跳出,不再往下进行
if (!doFilterSuccess)
break;
}
}
//##3.执行Interceptor 列表
List<Interceptor> interceptorList = handler.getInterceptorList();
boolean doInterceptorSuccess = true;
if (CollectionUtil.isNotEmpty(interceptorList)) {
for (Interceptor interceptor : interceptorList) {
doInterceptorSuccess = interceptor.doInterceptor(request, response, param, handler);
if (!doInterceptorSuccess)
break;
}
}
//##4.执行action
if (doFilterSuccess && doInterceptorSuccess) {
//调用 Action方法
List<Object> actionParamList = this.convertRequest2RequestParam(actionMethod, param, request, response);
Object result = ReflectionUtil.invokeMethod(controllerBean, actionMethod, actionParamList.toArray());
if (result != null) {
if (result instanceof View) {
handleViewResult((View) result, request, response);
} else if (result instanceof Data) {
handleDataResult((Data) result, response, handler);
} else {
Data data = new Data(result);
handleDataResult(data, response, handler);
}
}
}
} else {
//404
throw new RestException(RestException.SC_NOT_FOUND, "404 Not Found");
}
} catch (RedirectorInterrupt e) {
//被中断,跳转
View view = new View(e.getPath());
try {
handleViewResult(view, request, response);
} catch (Exception e1) {
LOGGER.error("中断,跳转 error", e);
}
} catch (RestException e) {
//需要返回前台信息的异常
writeError(e.getStatus(), e.getMessage(), response, contentType, characterEncoding);
} catch (Exception e) {
LOGGER.error("server error", e);
//500
writeError(RestException.SC_INTERNAL_SERVER_ERROR, "500 server error", response, contentType, characterEncoding);
try {
//邮件通知
MailHelper.errorMail(e);
} catch (Exception e1) {
LOGGER.error("mail error", e1);
}
} finally {
//##5.执行Filter链各个节点的收尾工作
if (CollectionUtil.isNotEmpty(doEndFilterList)) {
for (Filter filter : doEndFilterList) {
try {
filter.doEnd();
} catch (Exception endEx) {
LOGGER.error("filter doEnd failed", endEx);
}
}
}
}
}
use of org.axe.bean.mvc.Data in project Axe by DongyuCai.
the class TestController method analysisParam.
public Data analysisParam(Param param) {
Map<String, List<FormParam>> fieldMap = param.getFieldMap();
Map<String, List<FileParam>> fileMap = param.getFileMap();
Map<String, Object> model = new HashMap<>();
// fieldMap.entrySet().forEach(entry->model.put(entry.getKey(),entry.getValue()));
for (Map.Entry<String, List<FileParam>> file : fileMap.entrySet()) {
String fieldName = file.getKey();
List<FileParam> fileParamList = file.getValue();
List<String> fileNameList = new ArrayList<>();
for (FileParam fileParam : fileParamList) {
fileNameList.add(fileParam.getFileName());
}
model.put(fieldName, fileNameList);
}
Data data = new Data(model);
return data;
}
use of org.axe.bean.mvc.Data in project Axe by DongyuCai.
the class TestController method postPathParam2.
@Request(value = "/post100/4{id}_{name}", method = RequestMethod.POST)
public Data postPathParam2(@RequestParam("id") String id, Param param) {
System.out.println("postPathParam2");
Data data = analysisParam(param);
return data;
}
use of org.axe.bean.mvc.Data in project Axe by DongyuCai.
the class TestController method getOne.
//==================== postman success ================//
@Request(value = "/getOne/{id}", method = RequestMethod.GET)
public Data getOne(@RequestParam("id") Long id, Param param) {
// Data data = analysisParam(param);
if (id == null) {
throw new RestException(RestException.SC_BAD_REQUEST, "id不正确");
}
TestTable one = testService.get(id);
Data data = new Data(one);
return data;
}
use of org.axe.bean.mvc.Data in project Axe by DongyuCai.
the class TestController method postPathParam3.
@Request(value = "/post100/4id_name", method = RequestMethod.POST)
public Data postPathParam3(Param param) {
System.out.println("postPathParam3");
Data data = analysisParam(param);
return data;
}
Aggregations