首页 > 数据库 >基于springboot用“异常处理器“捕获解决“数据库信息录入重复“的问题“SQLIntegrityConstraintViolationException“Duplicate entry for

基于springboot用“异常处理器“捕获解决“数据库信息录入重复“的问题“SQLIntegrityConstraintViolationException“Duplicate entry for

时间:2024-07-02 17:56:14浏览次数:3  
标签:SQLIntegrityConstraintViolationException springboot Duplicate Controller 报错 entr

前言 

当我们编写后端时,会遇到一个问题,那就是:假如A用户向我们的数据库录入完登录信息后(姓名,账号等),B用户同样采用了一个相同的姓名提交了登录信息,那这个时候就不满足username的唯一约束,此时数据库就会报错

例如报错如下:

Duplicate entry '····' for key '····'

提示我们用户名已存在

那么我们可以采用一个较为便捷的方法:异常处理器来捕获重复的信息,拦截到错误请求后,提示用户更改用户名再重新注册。

方法

我们需要新建一个包 用来编写用于捕获全局的异常的处理器

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})//对所有加了RestController注解和Controller注解的类进行拦截操作
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 异常处理方法
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)//拦截包含SQLIntegrityConstraintViolationException的异常
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());//将报错信息打印到控制台看看报的是什么错误"Duplicate entry '用户名字' for key '数据库里的名字'"

        if (ex.getMessage().contains("Duplicate entry")){//如果抛出的是Duplicate entry开头的错误的话
            String[] split = ex.getMessage().split("");//根据空格找到用户的名称

            String msg = split[2] + "已存在";//拿到用户名称并在后面加上"已存在"的提示
            R.error(msg);//将msg传到error里面,以便于报错后提示给客户端

        }

        return R.error("未知错误");//如果不是Duplicate entry开头的错误,直接返回一个未知错误就好了
    }

}
· @ControllerAdvice(annotations = {RestController.class, Controller.class})

ControllerAdvice注解中的字段annotations声明了需要捕获哪些的类(类上加了RestController和Controller注解的类)

· @ExceptionHandler(SQLIntegrityConstraintViolationException.class)

这个注解定义了需要处理哪些异常,例如“SQLIntegrityConstraintViolationException”

我已经将每句代码的功能加上了注释说明!

标签:SQLIntegrityConstraintViolationException,springboot,Duplicate,Controller,报错,entr
From: https://blog.csdn.net/weixin_73928401/article/details/140130448

相关文章

  • maven构建断网springboot
    maven构建断网springboot我的依赖仓库(本地电脑,记住常用的那几个)org.springframework.boot下的spring-boot-starter-parentspring-boot-starter-web/Users/lin/Documents/repo使用maven进行创建空白项目在pom.xml中补全parent类parent groupId artifactId vers......
  • SpringBoot3连接Mysql数据库
    pom引入包,启动器<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.o......
  • SpringBoot+mail 轻松实现各类邮件自动推送
    一、简介在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。早期的时候,为了能实现邮件的自动发送功能,通常会使用JavaMail相关的api来完成。后来Spring推出的JavaMailSender工具,进一步简化了邮件的......
  • 基于SpringBoot+Vue邮件过滤系统设计和实现(源码+LW+调试文档+讲解等)
    ......
  • 开发一套java语言的智能导诊需要什么技术?java+ springboot+ mysql+ IDEA互联网智能3D
    开发一套java语言的智能导诊需要什么技术?java+springboot+mysql+IDEA互联网智能3D导诊系统源码医院导诊系统是一种基于互联网和3D人体的智能化服务系统,旨在为患者提供精准、便捷的医院就诊咨询服务。该系统整合了医院的各种医疗服务资;智慧导诊解决患者盲目就诊问题,减轻分......
  • .js.map文件泄露/Springboot信息泄露
    目录框架识别Webpack简述.js.map文件泄露利用Springboot 很多网站都使用的是现有的框架进行开发的,因此相当于很多目录和文件的路径都是开源可知的,因此我们就可以直接访问对应的路径,如果网站没有进行限制就有可能会导致敏感信息泄露框架识别可以根据页面的报错信息......
  • springboot集成activiti步骤
    在SpringBoot中集成工作流引擎,以Activiti为例,通常需要以下几个步骤:添加依赖:在pom.xml文件中添加Activiti的依赖。<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.x.x</version><......
  • springboot实现异步调用demo
    springboot实现异步调用异步调用特点异步调用在开发程序中被广泛应用,在异步任务中,主线程不需要阻塞等待异步任务的完成,而是可以继续处理其他请求。异步调用的特点如下:非阻塞:主线程在调用异步方法后不会等待其完成,而是立即返回。后台处理:耗时操作在后台独立的线程中执行,不会......
  • GeoServer改造Springboot源码十(样式管理设计)
    GeoServer改造Springboot源码一(公共部分)GeoServer改造Springboot源码二(数据源管理设计)GeoServer改造Springboot源码三(数据源管理代码)GeoServer改造Springboot源码四(图层管理设计)GeoServer改造Springboot源码五(图层管理代码)GeoServer改造Springboot源码六(工作区管理设计)Ge......
  • 基于SpringBoot+大数据+协同过滤推荐算法的电商商品推荐系统设计和实现(源码+LW+部署
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......