本文共 2592 字,大约阅读时间需要 8 分钟。
看代码,不解释
package com.example.mongodemo.config;import java.lang.annotation.*;/** * @Author lyr * @create 2020/3/31 11:27 */@Target(ElementType.METHOD)//打到方法上@Retention(RetentionPolicy.RUNTIME)//运行时@Documentedpublic @interface Check { String value() default "1";//1的话就检查,然后封装异常结果,0的话就不检查,继续往外抛,抛到 controller上处理结果}
定义切面:
package com.example.mongodemo.config;import com.example.mongodemo.code.ResultCode;import com.example.mongodemo.dto.ResultDTO;import com.example.mongodemo.exception.ServiceException;import javafx.scene.control.CheckBox;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import java.lang.reflect.Type;import java.util.Collections;import java.util.List;/** * @Author lyr * @create 2020/3/31 11:32 */@Aspect@Component@Slf4jpublic class ServiceExceptionHandler { @Pointcut("@annotation(Check)") public void delegate(){ } @SneakyThrows @Around("delegate()") public Object around(ProceedingJoinPoint pjp) { Object result = null; try{ //System.out.println("方法返回值:: "+getReturnType(pjp)); // if(t instanceof ResultDTO) { // System.out.println(111); // }else { // System.out.println(222); // } result = pjp.proceed(); return result; } catch (Throwable throwable) { Check annotation = ((MethodSignature)pjp.getSignature()).getMethod().getAnnotation(Check.class); if ("1".equals(annotation.value())) { //如果是1的话就 返回错误信息给前端,并打印日志, 如果是0的话 就直接往外抛异常,给Controller处理,同时打印日志 Type t = getReturnType(pjp); if(t instanceof ResultDTO) { return getFailResult(); } log.error("出现异常 service: {}",throwable.toString()); return null; }else{ throw new ServiceException(ResultCode.SERVICE_ERROR,throwable); } } } private static Type getReturnType(ProceedingJoinPoint pjp) throws NoSuchMethodException { return ((MethodSignature)pjp.getSignature()).getMethod().getReturnType(); } private static ResultDTO getFailResult() { ResultDTO resultDTO = ResultDTO.getFailForPost(); resultDTO.setMessage("服务器运行异常"); return resultDTO; }}
转载地址:http://tauzi.baihongyu.com/