package com.beauxie.param.demo.aop;
import com.beauxie.param.demo.annotation.ParamCheck;
import com.beauxie.param.demo.exception.ParamIsNullException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
/**
* @author Beauxie
* @date Created on 2017/1/6
*/
@Component
@Aspect
public class ParamCheckAop {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 定义有一个切入点,范围为web包下的类
*/
@Pointcut("execution(public * com.beauxie.param.demo.web..*.*(..))")
public void checkParam() {
}
@Before("checkParam()")
public void doBefore(JoinPoint joinPoint) {
}
/**
* 检查参数是否为空
*/
@Around("checkParam()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
MethodSignature signature = ((MethodSignature) pjp.getSignature());
//得到拦截的方法
Method method = signature.getMethod();
//获取方法参数注解,返回二维数组是因为某些参数可能存在多个注解
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
if (parameterAnnotations == null || parameterAnnotations.length == 0) {
return pjp.proceed();
}
//获取方法参数名
String[] paramNames = signature.getParameterNames();
//获取参数值
Object[] paranValues = pjp.getArgs();
//获取方法参数类型
Class<?>[] parameterTypes = method.getParameterTypes();
for (int i = 0; i < parameterAnnotations.length; i++) {
for (int j = 0; j < parameterAnnotations[i].length; j++) {
//如果该参数前面的注解是ParamCheck的实例,并且notNull()=true,则进行非空校验
if (parameterAnnotations[i][j] != null && parameterAnnotations[i][j] instanceof ParamCheck && ((ParamCheck) parameterAnnotations[i][j]).notNull()) {
paramIsNull(paramNames[i], paranValues[i], parameterTypes[i] == null ? null : parameterTypes[i].getName());
break;
}
}
}
return pjp.proceed();
}
/**
* 在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
*
* @param joinPoint
*/
@AfterReturning("checkParam()")
public void doAfterReturning(JoinPoint joinPoint) {
}
/**
* 参数非空校验,如果参数为空,则抛出ParamIsNullException异常
* @param paramName
* @param value
* @param parameterType
*/
private void paramIsNull(String paramName, Object value, String parameterType) {
if (value == null || "".equals(value.toString().trim())) {
throw new ParamIsNullException(paramName, parameterType);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验源码
共12个文件
java:10个
properties:1个
xml:1个
4星 · 超过85%的资源 需积分: 10 72 下载量 66 浏览量
2018-01-06
15:58:59
上传
评论 1
收藏 12KB ZIP 举报
温馨提示
使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
资源推荐
资源详情
资源评论
收起资源包目录
param-demo.zip (12个子文件)
param-demo
src
main
resources
application.properties 0B
java
com
beauxie
param
demo
ParamDemoApplication.java 320B
exception
GlobalExceptionHandler.java 2KB
ParamIsNullException.java 1KB
aop
ParamCheckAop.java 3KB
enums
EnumResultCode.java 405B
utils
ResponseMsgUtil.java 952B
web
HelloController.java 1KB
common
Result.java 960B
annotation
ParamCheck.java 535B
test
java
com
beauxie
param
demo
ParamDemoApplicationTests.java 342B
pom.xml 2KB
共 12 条
- 1
资源评论
- 熊峰的博客2018-04-29不是自己想要的,算是浪费C币了
Beauxie
- 粉丝: 106
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功