zoukankan      html  css  js  c++  java
  • 后端接受数据流处理数据(不完善)

    @Aspect
    @Order(10)
    public class RestControllerAspect {
    
        public static final Logger logger = LoggerFactory.getLogger(RestControllerAspect.class);
    
        @Resource
        private OfficeCommonService officeCommonService;
    
        @Pointcut("execution(public * com.sinosig.epassport.application.controller..*.*(..))")
        public void restful() {
        }
    
        private static String[] types = {"java.lang.Integer", "java.lang.Double",
                "java.lang.Float", "java.lang.Long", "java.lang.Short",
                "java.lang.Byte", "java.lang.Boolean", "java.lang.Char",
                "java.lang.String", "int", "double", "long", "short", "byte",
                "boolean", "char", "float"};
    
        @Around("restful()")
        public Object execute(ProceedingJoinPoint pjp) throws Throwable {
            ResultModel rm = new ResultModel();
            Object target = pjp.getTarget();
            processingBefore();
            if (target instanceof BeforeControllerHanding) {
                java.lang.reflect.Method method = Refs.getMethod(pjp.getTarget(), pjp.getSignature().getName());
                if (method.getReturnType() == Void.TYPE) {
                    logger.warn("return type is void, not wrap");
                    return pjp.proceed();
                }
                StringBuilder sb = new StringBuilder();
                //获取所有的参数
                Object[] args = pjp.getArgs();
                for (int k = 0; k < args.length; k++) {
                    Object arg = args[k];
                    // 获取对象类型
                    String typeName = arg.getClass().getTypeName();
                    for (String t : types) {
                        //1 判断是否是基础类型
                        if (t.equals(typeName)) {
                            return sb.append(arg + "; ");
    
                        } else {
                            Map fieldsValue = (Map) getFieldsValue(arg);
    
                            String sysNo = (String) fieldsValue.get("sysNo");
                            String sysPwd = (String) fieldsValue.get("sysPwd");
                            List<AccessControlEntity> sysNoAndPwd = officeCommonService.findSysNoAndPwd(sysNo, sysPwd);
                            if (sysNo.isEmpty() || sysPwd.isEmpty()) {
                                return new ResultModel(false, "", "子系统访问账号或密码不能为空");
                            } else if (sysNoAndPwd == null || sysNoAndPwd.size() <= 0) {
                                return new ResultModel(false, "", "账号或密码错误");
                            } else {
                                return pjp.proceed();
                            }
                        }
                    }
                }
                return null;
            }
            if (target instanceof RestControllerHandling) {
                try {
                    java.lang.reflect.Method method = Refs.getMethod(pjp.getTarget(), pjp.getSignature().getName());
                    if (method.getReturnType() == Void.TYPE) {
                        logger.warn("return type is void, not wrap");
                        return pjp.proceed();
                    }
                    Object result = pjp.proceed();
                    rm.setResultData(result.toString());
                    rm.setSuccess(true);
                    rm.setMessage("");
                } catch (DaoException e) {
                    rm.setMessage("数据访问错误");
                    logger.error(e.getMessage(), e);
                } catch (NoLoginException e) {
                    rm.setMessage("用户未登录或登陆已失效");
                    logger.error(e.getMessage(), e);
                } catch (CaptchaErrorException e) {
                    rm.setMessage("验证码错误");
                    logger.error(e.getMessage(), e);
                } catch (ValidationException e) {
                    rm.setMessage(e.getMessage());
                    logger.error(e.getMessage(), e);
                } catch (Throwable e) {
                    rm.setMessage("系统错误");
                    logger.error(e.getMessage(), e);
                }
            } else {
                return pjp.proceed();
            }
    
            return rm;
        }
    
    
        private void processingBefore() {
            try {
                RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
                if (requestAttributes instanceof ServletRequestAttributes) {
                    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                    Page page = PageSelector.getPage();
                    page.reset();
                    String enabledPage = request.getParameter("enabledPage");
                    String pageSizePm = request.getParameter("pageSize");
                    String pageIndexPm = request.getParameter("pageIndex");
                    if ("0".equals(enabledPage) || "N".equalsIgnoreCase(enabledPage) || "false".equalsIgnoreCase(enabledPage)) {
    
                    } else {
                        if (!Strings.isEmpty(pageSizePm) && !Strings.isEmpty(pageIndexPm)) {
                            int pageSize = Strings.toInteger(pageSizePm, 1);
                            int pageIndex = Strings.toInteger(pageIndexPm, 10);
                            page.setPaging(true);
                            page.setPageSize(pageSize);
                            page.setCurrentPage(pageIndex);
                        }
                    }
                }
    
    
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
    
    
        //解析实体类,获取实体类中的属性
        public static Object getFieldsValue(Object obj) {
            //通过反射获取所有的字段,getFileds()获取public的修饰的字段
            //getDeclaredFields获取private protected public修饰的字段
            Field[] fields = obj.getClass().getDeclaredFields();
            String typeName = obj.getClass().getTypeName();
            for (String t : types) {
                if (t.equals(typeName)) {
                    return "";
                }
            }
            Map<Object, Object> map = new HashMap<>();
            for (Field f : fields) {
                //在反射时能访问私有变量
                f.setAccessible(true);
                try {
                    for (String str : types) {
                        //这边会有问题,如果实体类里面继续包含实体类,这边就没法获取。
                        //其实,我们可以通递归的方式去处理实体类包含实体类的问题。
                        if (f.getType().getName().equals(str)) {
                            map.put(f.getName(), f.get(obj));
                        }
                    }
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            return map;
        }
    }
    

      

  • 相关阅读:
    flex布局
    input框不能输入问题
    JS的innerHTML完成注册表
    CSS的z-index属性和box-shadow属性
    JS个人笔记
    css照片墙
    透明度设置
    a标签的name属性
    iframe标签
    title属性
  • 原文地址:https://www.cnblogs.com/otways/p/11458170.html
Copyright © 2011-2022 走看看