zoukankan      html  css  js  c++  java
  • java 反射 处理 空值

    package org.zkdg.utils.spring.annotations.impl;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;
    import java.sql.SQLException;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    import org.zkdg.utils.entity.AjaxEntity;
    import org.zkdg.utils.spring.annotations.NNull;
    
    @Aspect
    @Component
    /**
     * 
     * @author 王海明
     * @createData 2017年7月13日 上午8:36:23
     * @说明 :出了一些空值。。。
     */
    public class AjaxEntityHandler {
    
        // @Pointcut("@annotation(org.zkdg.utils.annotations.AfterHandler)")
    
        @Pointcut("@annotation(org.zkdg.utils.spring.annotations.NullValidate)")
        // @Pointcut("execution(* org.dcexam.*.service.*.*(..))")
        public void beforeCall() {
            // service方法调用之前,检测参数,仅限第一个参数, 不能为空值
        }
    
        /**
         * service发生异常时调用
         */
        @Pointcut("execution(* org.dcexam.*.service.*.*(..))")
        public void afterThrowEx() {
            System.out.println("************
    
    
    
    
    
    
    
    
    
    
    
    *******");
        }
    
        @Around(value = "beforeCall()")
        public AjaxEntity doBefore(ProceedingJoinPoint point) throws Throwable {
            // TODO Auto-generated method stub
            // 判断不能为空
            Object[] args = point.getArgs();
            if (args == null || args[0] == null) {
                return new AjaxEntity("warning", "未选择任何数据。。。");
            }
    
            // 获取代理对象类方法参数
            MethodSignature target = (MethodSignature) point.getSignature();
    
            Annotation[][] annotations = target.getMethod().getParameterAnnotations();
    
            int argsIndex = 0;
            StringBuilder sb = new StringBuilder();
            for (Annotation[] annotation : annotations) {
                NNull nn = (NNull) annotation[0];
                String[] descs = nn.desc();
                String[] fields = nn.field();
                if (fields.length > 0 && fields.length > 0 && descs.length == fields.length) {
                    for (int i = 0; i < fields.length; i++) {
                        Field field = args[argsIndex].getClass().getDeclaredField(fields[i]);
                        // 允许访问
                        field.setAccessible(true);
                        Object object = field.get(args[argsIndex]);
                        if (object == null) {
                            sb.append(descs[i]).append("不能为空。。。<br>");
                        }
                        if (object instanceof String) {
                            String string = (String) object;
                            if (string.trim().length() == 0)
                                sb.append(descs[i]).append("不能为空。。。<br>");
                            else if (string.trim().equals("0"))
                                sb.append("未选择" + descs[i] + "。。。<br>");
                        } else if (object instanceof Number) {
                            Integer integer = (Integer) object;
                            if (integer == 0)
                                sb.append("未选择" + descs[i] + "。。。<br>");
                        }
    
                    }
                    if (sb.length() > 0)
                        return AjaxEntity.ERROR(sb.toString());
                }
                argsIndex++;
            }
    
            // 加上@Nullvalidate 注解,不允许出现空 值
            for (Object obj : args) {
                if (obj == null) {
                    return AjaxEntity.WARNING("出现了不允许的空值");
                } else if (obj instanceof String) {
                    if (((String) obj).length() == 0) {
                        return AjaxEntity.WARNING("出现了不允许的空值");
                    }
                }
            }
            AjaxEntity ajax = (AjaxEntity) point.proceed(args);
    
            return ajax == null ? AjaxEntity.ERROR("操作失败") : ajax;
        }
    
        /**
         * 
         * @param joinPoint
         *            连接点
         * @param ex
         *            异常
         * @return AjaxEntity 异常信息
         */
        @AfterThrowing(value = "afterThrowEx()", throwing = "ex")
        public void doAfterThrowEx(JoinPoint joinPoint, Exception ex) {
            AjaxEntity ajax = new AjaxEntity();
    
            if (ex.getCause() instanceof SQLException) {
                // 数据库操作异常
                ajax = AjaxEntity.ERROR("操作数据库时出现异常");
            }
    
        }
    
    }

    另外,java 命名 时 。属性最好不要有 下划线 , 否则 可能会粗错。。。。。

  • 相关阅读:
    C++第三章习题
    C++第五章习题
    C++第八章习题
    C++第四章习题
    第八章 图形编程 笔记
    第五章 Windows程序设计 笔记
    [转]c++ 结构体和类的区别
    C++第二章习题
    C++第六章习题
    Ubuntu10.04中设置和修改root密码
  • 原文地址:https://www.cnblogs.com/whm-blog/p/7170598.html
Copyright © 2011-2022 走看看