关于springboot全局异常处理

本文介绍了如何在SpringBoot中实现全局异常处理,包括创建@ControllerAdvice注解的异常类,处理MethodArgumentNotValidException、BindException、ConstraintViolationException和NullPointerException等异常。通过返回自定义的错误信息格式,为前端提供统一的错误反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局异常处理,对于每个后台来说很重要,下边记录springboot中的全局异常处理。

处理全局异常,只需要创建一个处理全局异常的类,添加几个注解和错误的处理逻辑即可,剩下的交给springboot,当对应的类型出现异常,会被捕获到,执行我们定义的处理方法。
 

只需一步

创建全局异常类,类上添加 @ControllerAdvice注解(开启全局捕获的注解),在方法上添加  @ExceptionHandler() 标识异常类型注解 和 @ResponseBody 注解,之后通过参数获取到所有异常信息,格式自定义,返给前端。

一、下边以 处理所有校验失败的异常类

MethodArgumentNotValidException - 使用json请求体调用接口,校验异常抛出此异常类

为例

@ControllerAdvice
public class ControllerExceptionHandler {
    /**
     * 处理所有校验失败的异常 - MethodArgumentNotValidException异常
     * @param e
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseBody
    public ComResponse ExceptionHandle(HttpServletRequest httpServletRequest, MethodArgumentNotValidException e) {

        StringBuffer hp = httpServletRequest.getRequestURL();
        String method = httpServletRequest.getMethod();

        Map<String, Object> mapList = new HashMap<>();
        SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        // 获取到所有异常信息,put 到 mapList中去
        List<String> errorList = e.getBindingResult()
                .getFieldErrors()
                .stream()
                .map(m -> m.getDefaultMessage())
                .collect(Collectors.toList());
        mapList.put("error", errorList);
        mapList.put("timestamp", simp.format(new Date()));
        mapList.put("requestMethod", method + " " + hp);
        ComResponse comResponse = new ComResponse<>();
        comResponse.setData(mapList);
        comResponse.setMsg("参数校验失败");
        comResponse.setSuccess(false);
        return comResponse;
    }
}

测试,返给前端如下格式,error错误信息之所以是个数组,原因error信息有可能是多个,比如:id不能为空、name不能为空、··· ···

二、使用form data方式调用接口,校验失败抛出的异常类 

BindException

三、单个参数校验失败抛出的异常类 

ConstraintViolationException

四、处理空指针的异常处理 

NullPointerException

    /**
     * 处理空指针的异常
     * @param req
     * @param e
     * @return
     */
    @ExceptionHandler(value =NullPointerException.class)
    @ResponseBody
    public Result exceptionHandler(HttpServletRequest req, NullPointerException e){
        System.err.println("未知异常!原因是:"+e);
        return Result.error(CommonEnum.BODY_NOT_MATCH);
    }

自定义注解编写:

https://hollis.blog.youkuaiyun.com/article/details/108687966

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值