• 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 命名 时 。属性最好不要有 下划线 , 否则 可能会粗错。。。。。

  • 相关阅读:
    硬件04:反馈与触发器
    硬件03:二进制减法器
    硬件02:二进制加法器
    ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
    微信全局获取并缓存Accesstoken的值
    MySQL 中文显示乱码
    HTML5 Canvas绘图详解 drawImage() 方法 有图有真相!
    [原创]超强C#图片上传,加水印,自动生成缩略图源代码
    微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题 .
    2015-10-19深圳面试
  • 原文地址:https://www.cnblogs.com/whm-blog/p/7170598.html
Copyright © 2020-2023  润新知