public class ParamAop {
/**
* 环绕通知 用于拦截指定内容,对参数合法性进行校验
* pj:ProceedingJoinPoint 是切入点对象
*/
@Around(value = "execution(* com.realfake.manager.consumer.controller.*.*(..)) && args(..,bindingResult)", argNames = "pj,bindingResult")
public Object paramAround(ProceedingJoinPoint pj, BindingResult bindingResult) {
System.out.println("————ParamAOP执行方法 " + pj.getSignature().getName());
// 判断参数是否合法
if(bindingResult.hasErrors()){
System.out.println("————ParamAOP检测参数不合法 "+bindingResult.getFieldError().getDefaultMessage());
return DataMessage.getErrorInstance(bindingResult.getFieldError().getDefaultMessage());
}
DataMessage dataMessage;
try {
// 执行操作,获取操作的返回结果
dataMessage = (DataMessage) pj.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
System.out.println("————ParamAOP检测参数时错误 "+bindingResult.getFieldError().getDefaultMessage());
return DataMessage.getErrorInstance("检测参数时错误"+bindingResult.getFieldError().getDefaultMessage());
}
// 输出结束标识
System.out.println("————ParamAOP执行方法结束 " + pj.getSignature().getName());
// 返回操作的原本结果
return dataMessage;
}
}