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("************\n\n\n\n\n\n\n\n\n\n\n\n*******");
} @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 命名 时 。属性最好不要有 下划线 , 否则 可能会粗错。。。。。

最新文章

  1. linux-----------linux查看并发数
  2. git config 配置
  3. (Hibernate进阶)Hibernate基本映射(三)
  4. AngularJS-chapter1-2-四大特性
  5. JavaScript强化教程——jQuery AJAX 实例
  6. jquery 在 table 中修改某行值
  7. mysql集群实例
  8. 延迟jquery,ready事件触发的时间
  9. 重新安装python
  10. [uiview animation ...] 这个函数有多少没有认识的可能!翻盘效果 上下左右怎么翻都不怕
  11. OC - 31.通过封装的自定义布局快速实现商品展示
  12. 复习css3的部分属性
  13. hdu1023:卡特兰数
  14. 关于C#的一点小知识 以后自己用
  15. 基于visual Studio2013解决面试题之0507字符串转整数
  16. 老男孩Python全栈开发(92天全)视频教程 自学笔记16
  17. DCOS实践分享(5):Open DCOS深入分析
  18. Ultra-QuickSort(poj 2299归并排序)
  19. Redis 为什么使用单进程单线程方式也这么快
  20. 基本项目框架搭建 sqlserver druid配置

热门文章

  1. 回调函数(callback)经典解答
  2. springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
  3. 1-EasyNetQ介绍(黄亮翻译)
  4. html乱码原因与网页乱码解决方法
  5. 前端设置cookie,以及jQuerycookie的使用
  6. Linux 设置新创建目录或文件的默认权限
  7. 形式化验证工具(PAT)Perterson Algorithm学习
  8. C++笔记--名字空间和异常
  9. java 包装类的应用
  10. 程序自动化需要一个Windows服务