springboot使用@ControllerAdvice 捕抓全局异常-自定义异常
发布日期:2021-05-14 12:40:40 浏览次数:19 分类:精选文章

本文共 2019 字,大约阅读时间需要 6 分钟。

Spring Boot全局异常处理配置与使用技巧

一、全局异常处理配置

在Spring Boot项目中,可以通过@ControllerAdvice注解配置全局异常处理,将常见的异常类型设置为捕捉范围。例如,设置@ExceptionHandler(Exception.class)可将所有非法异常捕获。具体实现方式如下:

  • 创建GlobalExceptionHandler类,注解@ControllerAdvice,这样才能被Spring Boot识别为全局异常处理器。默认扫描所有Whilst顶层异常,通过@ExceptionHandler注解设定要捕获的异常类型。

  • 配置全局异常处理器时务必将其单独作为一个bean文件或放置在与其他非bean文件共存的文件夹中。避免与其他非bean文件混杂,以免导致@ControllerAdvice无法识别。

  • 在处理异常时,需返回符合接口定义的响应对象。确保返回结果结构标准化,易于前端识别处理。

  • 二、自定义异常处理配置

    对于项目中定义的自定义异常(如LoginException类),需确保其继承自Runtime Exception,否则无法被@ControllerAdvice捕捉。具体实现方法如下:

  • 定义自定义异常类,继承自RuntimeException。
  • 使用@ExceptionHandler(自定义异常类)进行捕捉设置,确保其位置位于GlobalExceptionHandler类中。
  • 在处理自定义异常时,返回结构一致的响应对象。输入参数需符合自定义异常定义。
  • 三、常见异常抛出与捕捉规则

    在编写接口方法时,需遵守以下异常抛出规则:

  • 如果需让GlobalExceptionHandler捕捉到异常,则必须抛出Runtime Exception及其子类。如:throw new RuntimeException("描述信息");是可捕捉的。
  • 如果抛出Exception或其子类,即使使用@ExceptionHandler也无法捕捉到。例如:throw new Exception("无法捕捉的异常"),这种情况下异常将直接传递给调用者。
  • 定义的自定义异常也必须继承自Runtime Exception,否则无法被捕捉。例如:
  • class LoginException extends RuntimeException { // 定义异常属性和构造函数 }

    四、代码示例及其解读

    <例1>全局异常处理器配置:

    @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public ResponseCommand exceptionHandle(RuntimeException e) { e.printStackTrace(); return new ResponseCommand(100, "请求异常"); }

    @ExceptionHandler(LoginException.class)
    @ResponseBody
    public ResponseCommand exceptionLogin(LoginException e) {
    e.printStackTrace();
    return new ResponseCommand(100, "登录异常");
    }

    }

    <例2>自定义异常定义:

    package com.icode.common.constant.exception;

    import lombok.Data;

    @Data public class LoginException extends RuntimeException { private Integer status;

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

    }

    <例3>接口异常抛出示例:

    @PostMapping("article/validate/postArticle") public String saveArticle(String token, ArticleRequestCommand command) throws Exception { // 可捕捉到全局异常 throw new RuntimeException("可以捕捉的异常"); // 无法被捕捉到 throw new Exception("无法捕捉的异常"); return "succ"; }

    以上配置方式有助于规范异常处理流程,确保程序在异常情况下能够正常报错返回。在编写预警信息时,建议遵循以下规范:

    • 错误码设计要唯一且一致
    • 错误信息尽量简洁明了,并便于理解
    • 返回格式统一,方便前端处理
    上一篇:axios请求使用方法 并解决跨域问题
    下一篇:lombok插件实现注解生成get/set/toString方法

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月18日 23时25分31秒