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("************\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 命名 时 。属性最好不要有 下划线 , 否则 可能会粗错。。。。。
java 反射 处理 空值的更多相关文章
- java 反射赋空值
https://stackoverflow.com/questions/10087989/how-do-i-reflectively-invoke-a-method-with-null-as-argu ...
- Java进阶(六)Java反射机制可恶问题NoSuchFieldException
作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个qu ...
- 面试官:如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据? | Java反射高级应用
原文链接:原文来自公众号:C you again,欢迎关注! 1.问题描述 "如何在Integer类型的ArrayList中同时添加String.Character.Boolean等 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
随机推荐
- 记录一次手机联系人整理(XML文件格式处理)
场景:1.IOS手机和Android手机联系人同步时有部分重复联系人. 2.很早以前的HTC手机导出的联系人中备注信息有大量乱码,且很多联系人生日被设置为1970-01-01,导致生日提醒软件产生骚扰 ...
- 剑指offer 04_替换字符串中的空格
#include <stdio.h> void ReplaceBlank(char string[],int length){ if(string == NULL || length == ...
- LINUX 使用DBCA创建ORACLE数据库
- MMSeg中文分词算法
Java中有一些开源的分词项目,比如:IK.Paoding.MMSEG4J等等.这里主要说的是MMSEG4J中使用的MMSeg算法.它的原文介绍在:http://technology.chtsai.o ...
- IFC数据模型在三维引擎中模拟
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...
- Postman工具---请求与响应
参考:http://blog.csdn.net/water_0815/article/details/53311561
- easyUI datagrid 分页参数page和rows
Struts2获取easyUI datagrid 分页参数page和rows 用pageHelper分页时,只要是能够获取前台传来的两个参数page和rows基本就完成了很大一部分. 获取方法:定义两 ...
- CodeForces 785D Anton and School - 2 (组合数学)
题意:有一个只有’(‘和’)’的串,可以随意的删除随意多个位置的符号,现在问能构成((((((…((()))))….))))))这种对称的情况有多少种,保证中间对称,左边为’(‘右边为’)’. 析:通 ...
- 预编译对象解决SQL注入问题