Spring AOP应用
-
统一异常处理
-
声明异常处理类
-
异常必须抛出
/** * 统一异常处理 **/ //指定异常处理的包, @ControllerAdvice(basePackages ="com.niufx.web.controller") public class ExceptionControllerAdvice { //返回异常为json字符串 @ResponseBody //声明捕获那种异常 @ExceptionHandler(value = Exception.class) public ReturnModel<String> myExceptionHandler(Exception e){ ReturnModel<String> model = new ReturnModel<String>(); model.setCode(-1); model.setMessage("系统忙,请稍后再试试吧!"); model.setSubCode(null); return model; } }
-
-
拦截某个类,方法等
/** * @author: fzz **/ @Component @Aspect//切面注解 @Order(1)//加载次序,数字越小,优先级越高 @Slf4j public class HttpAspect { // 拦截某个类的某些方法,可以用与或非等表达式适配自己需要的 // 例如: @Around("execution(* com.controller.*.*(..)) && !execution(* com.controller.TransferCircleController.*(..)) ") @Around("execution(* com.niufx.service.common.httpclient.HttpService.do*(..))") public Object httpService(ProceedingJoinPoint joinPoint) throws Throwable{ //获取参数值 Object args[] = joinPoint.getArgs(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); //获取参数名 String[] parameterNames = signature.getParameterNames(); StringBuilder sb = new StringBuilder(); String url = null; for(int i = 0; i < parameterNames.length; i++){ if("url".equals(parameterNames[i])){ url = (String) args[i]; }else{ sb.append(parameterNames[i] +"=" + args[i] +"; "); } } long start = System.currentTimeMillis(); //执行方法 Object proceed = joinPoint.proceed(); long consumTime = System.currentTimeMillis() - start; // log.info("请求url:【" + url +"】 请求参数:【"+ sb +"】 "+"返回值:【"+ JSON.toJSONString(proceed, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect)+"】 耗时:【"+consumTime +"】ms"); if(proceed==null){ log.error("请求url:【" + url +"】 请求参数:【"+ sb +"】 "+"返回值:【"+ JSON.toJSONString(proceed, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect)+"】 耗时:【"+consumTime +"】ms"); throw new Exception("请求基础服务异常:返回参数为空"); } JSONObject parse = (JSONObject) JSONObject.parse(proceed.toString()); Integer code = parse.getInteger("code"); if (code==-1){ log.warn("请求url:【" + url +"】 请求参数:【"+ sb +"】 "+"返回值:【"+ JSON.toJSONString(proceed, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect)+"】 耗时:【"+consumTime +"】ms"); } return proceed; } }