Search in sources :

Example 1 with Data

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);
                }
            }
        }
    }
}
Also used : RestException(org.axe.exception.RestException) Handler(org.axe.bean.mvc.Handler) Data(org.axe.bean.mvc.Data) Method(java.lang.reflect.Method) View(org.axe.bean.mvc.View) ServletException(javax.servlet.ServletException) RestException(org.axe.exception.RestException) IOException(java.io.IOException) Filter(org.axe.interface_.mvc.Filter) RequestParam(org.axe.annotation.mvc.RequestParam) Param(org.axe.bean.mvc.Param) Interceptor(org.axe.interface_.mvc.Interceptor) RedirectorInterrupt(org.axe.exception.RedirectorInterrupt)

Example 2 with Data

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;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Data(org.axe.bean.mvc.Data) FileParam(org.axe.bean.mvc.FileParam) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 3 with 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;
}
Also used : Data(org.axe.bean.mvc.Data) HttpServletRequest(javax.servlet.http.HttpServletRequest) Request(org.axe.annotation.mvc.Request)

Example 4 with 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;
}
Also used : RestException(org.axe.exception.RestException) Data(org.axe.bean.mvc.Data) TestTable(org.test.bean.TestTable) HttpServletRequest(javax.servlet.http.HttpServletRequest) Request(org.axe.annotation.mvc.Request)

Example 5 with 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;
}
Also used : Data(org.axe.bean.mvc.Data) HttpServletRequest(javax.servlet.http.HttpServletRequest) Request(org.axe.annotation.mvc.Request)

Aggregations

Data (org.axe.bean.mvc.Data)5 HttpServletRequest (javax.servlet.http.HttpServletRequest)3 Request (org.axe.annotation.mvc.Request)3 RestException (org.axe.exception.RestException)2 IOException (java.io.IOException)1 Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 ServletException (javax.servlet.ServletException)1 RequestParam (org.axe.annotation.mvc.RequestParam)1 FileParam (org.axe.bean.mvc.FileParam)1 Handler (org.axe.bean.mvc.Handler)1 Param (org.axe.bean.mvc.Param)1 View (org.axe.bean.mvc.View)1 RedirectorInterrupt (org.axe.exception.RedirectorInterrupt)1 Filter (org.axe.interface_.mvc.Filter)1 Interceptor (org.axe.interface_.mvc.Interceptor)1 TestTable (org.test.bean.TestTable)1