package cn.timer.api.aspect; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.ObjectError; import com.alibaba.fastjson.JSONObject; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.ClassUtil; import cn.timer.api.aspect.lang.annotation.BindingResultCtrol; import cn.timer.api.aspect.lang.bean.ValidationError; import cn.timer.api.utils.ResultUtil; /** * 校验信息返回-(闲置) * * @author TZQ */ //@Aspect //@Component public class BindingResultAspect { // @annotation配置织入点 // @Pointcut("@annotation(cn.timer.api.aspect.lang.annotation.BindingResultCtrol)") // public void bindingResultPointCut() // { // } // execution 配置织入点 -匹配 cn.timer.api.controller 包下的所有子包的类的方法 // @Pointcut("execution(* cn.timer.api.controller.spmk.*.*(..))") public void clazzPointCut(){ } // // @Before("bindingResultPointCut()") // public void doBefore(JoinPoint point) throws Throwable // { // //预留 // handleDataScope(point); // } // @Around("bindingResultPointCut() && args(..,bindingResult)") // @Around("clazzPointCut()") // public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { // Long startTime = System.currentTimeMillis(); // Object retVal; // Object[] objs = joinPoint.getArgs(); // List<Object> listObj = CollectionUtil.toList(objs); // BeanPropertyBindingResult optional = (BeanPropertyBindingResult)listObj.stream() // .filter(p -> "BeanPropertyBindingResult".equals(ClassUtil.getClassName(p, true))) // .findFirst() // .orElse(null); // if(optional != null && optional.hasErrors()){ // List<ObjectError> ls = optional.getAllErrors(); // List<ValidationError> listVe = new ArrayList<ValidationError>(); // ValidationError ve; // for (ObjectError one : ls) { // // String fieldString = one.getCodes().length >= 1 ? one.getCodes()[0] : ""; // if (fieldString != null) { // fieldString = fieldString.substring(fieldString.lastIndexOf(".") + 1); // } // // ve = ValidationError.builder().field(fieldString).msg(one.getDefaultMessage()).build(); // listVe.add(ve); // // } // retVal = ResultUtil.error(listVe); // }else { // retVal = joinPoint.proceed(joinPoint.getArgs()); // } // Console.log("返回内容 {}: " ,JSONObject.toJSONString(retVal)); // Long endtime = System.currentTimeMillis(); // Console.log("执行耗时为{}:" ,endtime-startTime + "ms"); // // return retVal; // } protected void handleDataScope(final JoinPoint joinPoint) { // 获得注解 BindingResultCtrol controllerDataScope = getAnnotationLog(joinPoint); if (controllerDataScope == null) return; Console.log("title" + controllerDataScope.title()); Console.log("paramType" + controllerDataScope.paramType()); Object[] objs = joinPoint.getArgs(); List<Object> listObj = CollectionUtil.toList(objs); BeanPropertyBindingResult optional = (BeanPropertyBindingResult)listObj.stream() .filter(p -> "BeanPropertyBindingResult".equals(ClassUtil.getClassName(p, true))) .findFirst() .orElse(null); if (optional != null && optional.hasErrors()) { System.err.println("Optional: "+ optional); } } /** * 是否存在注解,如果存在就获取 */ private BindingResultCtrol getAnnotationLog(JoinPoint joinPoint) { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method method = methodSignature.getMethod(); if (method != null) { return method.getAnnotation(BindingResultCtrol.class); } return null; } }