Java中SpringBoot项目做全局异常处理方法

 

可以使用@ControllerAdvice注解,编写一个全局异常处理类,再自定义一个方法使用@ExceptionHandler来捕获具体的异常并作相应的处理。

通常情况下后台向前台返回结果时,会把结果封装成包含有错误码,错误信息以及数据本身的json数据,因此我们可以使用自定义异常类,自定义枚举错误码,在捕获全局异常后,向前台返回一个包含错误码的信息。

import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.nio.file.AccessDeniedException;
import java.util.List;

/**
 * 全局异常处理
 */
//@RestController  //Controller+ResponseBody
//@RestControllerAdvice : 是对@RestController的增强,拥有@RestController的能力
//且注解了该注解的类下面的方法可以在其他controller执行前,后,做一些事情
@RestControllerAdvice
public class GlobleExceptionHandler {

    //异常处理 , ExceptionHandler 的作用是捕获异常,通过value指定要捕获的异常
    @ExceptionHandler(value = GlobleException.class)
    public AjaxResult globleExceptionHandler(GlobleException e){
        e.printStackTrace();
        return AjaxResult.me().setSuccess(false).setMessage(e.getMessage());
    }

    @ExceptionHandler(value = AccessDeniedException.class)
    public AjaxResult accessDeniedExceptionHandler(AccessDeniedException e){
        e.printStackTrace();
        return AjaxResult.me().setSuccess(false).setMessage(e.getMessage());
    }

    //异常处理 , ExceptionHandler 的作用是捕获异常,通过value指定要捕获的异常
    @ExceptionHandler(value = Exception.class)
    public AjaxResult exceptionHandler(Exception e){
        e.printStackTrace();
        return AjaxResult.me().setSuccess(false).setMessage("系统内部异常");
    }
    //异常处理 , ExceptionHandler 的作用是捕获异常,通过value指定要捕获的异常
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public AjaxResult beanValidExceptionHandler(MethodArgumentNotValidException e){
        e.printStackTrace();
        StringBuilder  sb = new StringBuilder();
        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
        allErrors.forEach(err->{
            String defaultMessage = err.getDefaultMessage();
            sb.append(defaultMessage).append(" ; ");
        });
        return AjaxResult.me().setSuccess(false).setMessage(sb.toString());
    }
}
/**
 * 全局异常
 */
public class GlobleException extends RuntimeException{

    public GlobleException(){

    }

    public GlobleException(String message){
        super(message);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会理财的程序员不是好摄影师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值