spingboot定义一个全局异常处理器

java 复制代码
package com.itheima.exception;

import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理器
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理数据库完整性约束异常(如手机号、用户名重复)
     */
    @ExceptionHandler
    public Result handleSQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException e) {
        log.error("数据库完整性约束异常: {}", e.getMessage());
        String message = e.getMessage();
        if (message != null && message.contains("Duplicate entry")) {
            // 提取冲突的值, 报错格式: Duplicate entry '13800000001' for key 'phone'
            String value = message.split(" ")[2].replace("'", "");
            if (value.isEmpty()) {
                return Result.error("手机号/用户名等唯一字段为空或重复, 请检查提交的数据");
            }
            return Result.error(value + " 已存在");
        }
        return Result.error("数据库操作失败");
    }

    /**
     * 兜底处理所有其他异常
     */
    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e) {
        log.error("程序运行出现异常: ", e);
        return Result.error("系统繁忙, 请稍后重试");
    }
}
相关推荐
曹牧1 小时前
Jackson 反序列化字段名不匹配
java
名字还没想好☜1 小时前
Spring Boot 优雅停机实战:等在途请求处理完再退出,配合 K8s preStop 别丢请求
java·后端·spring
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端
qq_269506751 小时前
第30课-请求与响应
java
qq_269506752 小时前
第28课-AJAX与前端框架
java
程序员清风2 小时前
Java 后端如何接入大语言模型
java·spring boot·架构·aigc
xieliyu.2 小时前
JVM 垃圾回收机制详解:从标记过程、回收算法到垃圾收集器
java·jvm·笔记·java-ee
JavacKaka2 小时前
Redis大Key导致生产事故复盘博客-2026-09-18
java
右耳朵猫AI2 小时前
Java周刊2026W38 | Micronaut 修补三漏洞、JDK 27 提速 54%、Jetty 修复抖动测试
java·后端·spring