Spring boot 中的 统一异常处理

本文介绍了如何在SpringBoot项目中实现统一异常处理,包括全局、特定和自定义异常的处理方式。通过创建测试Controller和异常处理器,展示了如何捕获并响应不同类型的异常,确保系统稳定性和用户体验。
摘要由CSDN通过智能技术生成

用 spring boot 开发 Java Web 项目,在 Controller 层处理用户提交的请求时,难免会遇到异常。因此学习 统一的处理 Controller 层中出现的异常是有必要。

项目下载


统一异常处理:

  1. 全局异常处理
  2. 特定异常处理
  3. 自定义异常处理

主要代码

测试的 Controller

package top.leeti.controller;

import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import top.leeti.entity.R;
import top.leeti.exception.MyException;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@RestController
public class IndexController {

    @ApiOperation("正常测试的 uri")
    @GetMapping("test")
    public R test() {
        return R.ok();
    }

    @ApiOperation("测试全局异常的 uri")
    @GetMapping("globalError")
    public R testGlobalError() {
        // 抛出: IndexOutOfBoundsException
        // 并被全局异常处理器捕获
        List<String> list = new ArrayList<>(Arrays.asList("a"));
        list.get(3);

        return R.ok();
    }

    @ApiOperation("测试特定异常的 uri")
    @GetMapping("specialError")
    public R testSpecialError() {
        // 抛出: ArithmeticException
        // 并被 ArithmeticException 异常处理器捕获
        int ans = 9 / 0;

        return R.ok();
    }

    @ApiOperation("测试自定义异常的 uri")
    @GetMapping("mineError")
    public R testMineError() throws MyException {
        // 抛出: MyException
        // 并被 MyException 异常处理器捕获
        throw new MyException();
    }
}

测试的异常处理器

package top.leeti.handler;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import top.leeti.entity.R;
import top.leeti.exception.MyException;

@RestControllerAdvice
public class TestExceptionHandler {

    @ExceptionHandler(Exception.class)
    public R error(Exception e) {
        e.printStackTrace();
        return R.error().message("执行出现了全局异常处理......");
    }

    @ExceptionHandler(ArithmeticException.class)
    public R error(ArithmeticException e) {
        e.printStackTrace();
        return R.error().message("执行出现了 ArithmeticException 异常处理......");
    }

    @ExceptionHandler(MyException.class)
    public R error(MyException e) {
        e.printStackTrace();
        return R.error().message("执行出现了 MyException 异常处理......");
    }
}

开始测试

启动项目

依次输入 url,并观察返回的结果:

  • http://localhost:8000/test
    在这里插入图片描述
  • http://localhost:8000/globalError
    在这里插入图片描述
  • http://localhost:8000/specialError
    在这里插入图片描述
  • http://localhost:8000/mineError
    在这里插入图片描述

至此,Spring boot 中的 统一异常处理 结束了。

需要说明的是:

统一异常处理的原理是 spring 的 ()面向切面编程
全局异常能匹配没有特殊说明(即单独处理的异常)的全部异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值