如何进行统一异常处理

我们在项目中可以使用@ControllerAdvice注解结合@ExceptionHandler用于全局异常的处理,@ControllerAdvice学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理。此注解结合方法型注解@ExceptionHandler,可用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的。

  • 定义全局异常处理类GlobalExceptionHandler,并在类上添加@ControllerAdvice注解,在异常方法上添加@ExceptionHandler注解。
    *

    java 复制代码
    package com.app.studypro.common;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.sql.SQLIntegrityConstraintViolationException;
    
    /**
     * 统一异常处理逻辑
     *
     * @author Administrator
     */
    @Slf4j
    @ResponseBody
    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        /**
         * 保存方法时触发的唯一性异常处理方法
         *
         * @param exception 错误
         * @return 返回异常信息
         */
        @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
        public ResultBean<String> exceptionHandler(SQLIntegrityConstraintViolationException exception) {
            log.error(exception.getMessage());
            if (exception.getMessage().contains("Duplicate entry")) {
                String[] split = exception.getMessage().split(" ");
                String msg = split[2] + "已存在";
                return ResultBean.error(msg);
            }
            return ResultBean.error("未知错误");
        }
    
        /**
         * 自定义的异常处理方法
         *
         * @param exception 错误
         * @return 返回异常信息
         */
        @ExceptionHandler(CustomException.class)
        public ResultBean<String> exceptionHandler(CustomException exception) {
            log.error(exception.getMessage());
            return ResultBean.error(exception.getMessage());
        }
    
    }
相关推荐
500842 小时前
昇腾 CANN 的五层架构,到底分了哪五层
java·人工智能·分布式·架构·ocr·wpf
摇滚侠2 小时前
Java 零基础全套教程,File 类与 IO 流,笔记 177-178
java·开发语言·笔记
雨落在了我的手上3 小时前
初始java(十):类和对象(⼆)
java·开发语言
莫雪歌3 小时前
Java AI 应用开发实践:基于 Spring Boot 实现 Chat、Memory、RAG 与 Tool Calling
java·aigc
SmartBrain4 小时前
AI全栈开发(SDD):慢病管理系统工程级设计
java·大数据·开发语言·人工智能·架构·aigc
梦想CAD控件4 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
老毛肚4 小时前
Spring boot 特性和自写Reids组件
java·spring boot·后端
极光代码工作室5 小时前
基于SpringBoot的课程管理系统
java·springboot·web开发·后端开发
JustNow_Man5 小时前
【opencode】安装使用daytona沙箱插件
android·java·javascript
武子康5 小时前
Java-05 深入浅出 MyBatis动态SQL与参数拼接完全指南
java·spring boot·后端