SpringBoot - 全局异常处理

如果没有处理异常,异常信息就会层层递进:mapper => service => controller => 框架
最终报错:

处理方案:

  • controller 层每个映射进行 try/catch 处理:比较臃肿且繁琐
  • Spring 全局异常处理器
    • @RestControllerAdvice: RestController + @ResponseBody
    • @ExceptionHandler(异常类对象)

案例1:捕获最大的异常,打印异常后将异常信息返回统一结果给前端

package com.chuangzhou.exception;


import com.chuangzhou.pojo.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

//@RestControllerAdvice
public class GlobalExceptionHandler {


    @ExceptionHandler(Exception.class)
    public Result gloHanlder(Exception e){
        e.printStackTrace();
        return Result.error(e.getMessage());
    }
}

如下,不推荐这种处理方案,用户会接收到一大堆看不懂的信息,最终还是不知道什么原因

案例2:捕获具体异常,返回给用户简明易懂的报错原因

package com.chuangzhou.exception;


import com.chuangzhou.pojo.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public Result hanlder(Exception e){
        String message = e.getMessage();
        if (message.contains("就业部")){
            return Result.error("就业部已经存在不可以重复添加");
        }
        return Result.error("添加失败");
    }

}

效果:

最后如果全局异常处理类中存在多个异常会优先进入到异常父类当中

posted @   chuangzhou  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示