Spring-自定义异常及全局异常处理@RestControllerAdvice

前言

开发中,经常需要对业务异常进行处理;而往往业务中会出现很多种情况需要进行业务处理,例如查询人员数据为空、人员角色不符、人员收货地址不存在等等,都需要try catch进行不同的处理。这样的try catch会造成大量的重复代码,此时就需要全局异常捕获@RestControllerAdvice,通过它来构建一个全局捕获根据不同的异常类型来进行统一的处理。

1、构建自定义业务异常-BusinessException

复制代码
public class BusinessException extends RuntimeException {

    private Integer code;

    private String message;

    public BusinessException(Integer code, String message) {
        super();
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2、创建全局统一异常处理

复制代码
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
	// 统一处理业务异常-BusinessException
    @ExceptionHandler(value = BusinessException.class)
    public NormalResponse businessException(HttpServletRequest request,BusinessException e){
        log.error("{}请求异常{}",request.getRequestURL(),e.getMessage());
        return NormalResponse.fail(e.getMessage());
    }
  }

3、在业务中使用

复制代码
    public void testGlobalException() {
        // 业务处理...
        Student student = studentMapper.selectById(10086);
        if (Objects.isNull(student)) {
            throw new BusinessException(20001, "查询人员不存在");
        }
        // 正常逻辑处理...
    }

假设我们在业务处理中,需要查询id=10086的学生,然后对这个学生的信息进行处理(更新,添加字段等),当查询人员不存在时,需要提醒接口调用方出现了业务问题-查询人员不存在。

4、演示结果

复制代码
控制台日志:
2024-09-10 15:48:15.893 ERROR 51752 --- [nio-6024-exec-3] c.s.d.exception.GlobalExceptionHandler   : http://localhost:6024/test/global-exception请求异常查询人员不存在
15:48:15.893 [http-nio-6024-exec-3] ERROR c.s.d.e.GlobalExceptionHandler - http://localhost:6024/test/global-exception请求异常查询人员不存在

postman接口返参:
{
    "code": -1,
    "message": null,
    "data": "查询人员不存在"
}
相关推荐
txxzjmzlh2 小时前
SpringBoot 配置⽂件
java·spring boot·spring
骑着蜗牛撵大象3275 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
揣一尾游鱼yu6 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
todoitbo9 小时前
MongoDB迁移之后,Spring Data 和 Hibernate 各自接哪类请求
大数据·数据库·mongodb·spring·hibernate·金仓数据库
Flynn Liang12 小时前
Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)
人工智能·spring·文生图·音视频·语音合成·tts·springai
步行cgn13 小时前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc
步行cgn13 小时前
Spring MVC 九大核心角色详解:请求处理链路中的每一个关键组件
java·spring·mvc
Félix25114 小时前
Nacos学习笔记(SpringBoot/SpringCloud)
java·spring boot·spring
七夜zippoe14 小时前
LangChain4j vs Spring AI:Java AI 框架怎么选(对比表)
java·人工智能·spring·ai·langchain4j
Flynn Liang15 小时前
让 AI 查订单、查库存、发消息:Spring AI 自定义工具(Tool)实战与工具描述工程
java·人工智能·spring·函数调用·springai·tool·自定义工具