zoukankan      html  css  js  c++  java
  • spring controller全局校验(JSR-303)、异常拦截AOP

    package dhht.seal.extension.config;

    import dhht.seal.extension.vo.ResultVO;
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;

    import java.util.List;

    /**
    * @Author: sh
    * @Description:
    * @Version:
    * @Date: 2020/4/4
    */
    @Slf4j
    @Component
    @Aspect
    public class ControllerResultAop {
       // 此包及其子包下的所有以Controller名称结尾的类下的所有方法
    @Pointcut("execution(* dhht.seal.extension.miniprogram..*Controller.*(..))")
    public void controllerPointCut() {
    }

    @Around(value = "controllerPointCut()")
    public Object around(ProceedingJoinPoint joinPoint) {
    BindingResult bindingResult = null;
    try {
    Object[] args = joinPoint.getArgs();
    if (null != args && args.length > 0) {
    for (Object arg : args) {
    if (arg instanceof BindingResult) {
    bindingResult = (BindingResult) arg;
    break;
    }
    }
    }
    if (bindingResult != null) {
    List<ObjectError> errors = bindingResult.getAllErrors();
    if (errors.size() > 0) {
    for (ObjectError error : errors) {
    return ResultVO.fail(error.getDefaultMessage(),null);
    }
    }
    }
    return joinPoint.proceed();
    } catch (Throwable throwable) {
    String className = joinPoint.getTarget().getClass().getName();
    Signature signature = joinPoint.getSignature();
    String methodName = signature.getName();
    return ResultVO.fail(className+methodName+"执行失败",null);
    }
    }
    }
  • 相关阅读:
    day01-h1字体大小和文本居中
    js正则表达式中的
    js滚动分页原理
    在web.xml中设置全局编码
    C# 导出word 表格代码
    C# 创建单例
    Winform 异步调用2 时间
    Winform 异步调用
    c#中跨线程调用windows窗体控件
    C# 中的委托和事件
  • 原文地址:https://www.cnblogs.com/sung1024/p/12631153.html
Copyright © 2011-2022 走看看