springboot中全局异常处理

    技术2022-07-11  91

     

    @ControllerAdvice(basePackages = "") 可以扫描@Controller和@Rest Controller的类,basePackages可以配置执行的包扫描

    @RestControllerAdvice 只扫描@RestController注解的类

     

    @ExceptionHandler(value = Exception.class) 异常处理拦截异常类型

    通过重写的exceptionHandler方法实现异常拦截

    package com.xxxx.common.handler; import com.xxx.common.feedback.ResponseData; import com.xxx.common.feedback.ResponseDataUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; /** * Description: </br> * date: 2020/6/30 17:01</br> * * @author: Administrator</ br> * @since JDK 1.8 */ @ControllerAdvice @Slf4j public class AcceptControllerAdvice { @ResponseBody @ExceptionHandler(value = Exception.class) public ResponseData exceptionHandler(Exception e){ //发生异常进行日志记录,写入数据库或者其他处理 log.error(e.getLocalizedMessage()); e.printStackTrace();//打印堆栈信息,方便定位 //如果是入参校验异常 StringBuilder stringBuilder = new StringBuilder(); if (e instanceof MethodArgumentNotValidException){ MethodArgumentNotValidException e1 = (MethodArgumentNotValidException) e; BindingResult result = e1.getBindingResult(); if (result.hasErrors()) { List<ObjectError> errors = result.getAllErrors(); errors.forEach(p ->{ FieldError fieldError = (FieldError) p; stringBuilder.append(fieldError.getField()+":"+fieldError.getDefaultMessage()+","); }); } }else { stringBuilder.append(e.getLocalizedMessage()); } return ResponseDataUtil.buildError(stringBuilder); } }

     

    Processed: 0.010, SQL: 9