首页 > 数据库 >Spring中全局捕获数据库唯一约束等异常,返回友好提示给用户

Spring中全局捕获数据库唯一约束等异常,返回友好提示给用户

时间:2024-01-06 15:31:58浏览次数:39  
标签:AjaxResult return 数据 Spring 数据库 public add 异常 捕获

controller中有如下新增数据的代码

@ApiOperation(value = "add", notes = "新增数据")
@PostMapping("add")
public AjaxResult add(@RequestBody Xxx x) {
    return AjaxResult.success(xxxService.save(x));
}

如果想实现数据唯一性检验,并提示用户有如下方法

方法一:代码逻辑层面通过唯一条件查询数据,通过数据是否存在来判断

方法二:在数据库中添加唯一索引,不管有没有在业务层增加限制,唯一索引都是很有必要的,因为阿里巴巴开发规范中这么说

Spring中全局捕获数据库唯一约束等异常,返回友好提示给用户_数据

  1. 在每个插入获取编辑的地方增加try-catch,捕获到异常后判断类型,唯一约束抛出的是这个异常类:java.sql.SQLIntegrityConstraintViolationException.
  2. 但是这不整齐的try-catch不说,还得所有地方都写一遍
@ApiOperation(value = "add", notes = "新增数据")
@PostMapping("add")
public AjaxResult add(@RequestBody Xxx x) {
    try{
        xxxService.save(x)
    }catch(Exception ){
        //判断异常类型,返回错误
        return AjaxResult.error("数据重复请确认");
    }
    return AjaxResult.success();
}
  1. 重点来啦,我们可以建一个全局的异常处理类,@RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常,更详细的内容可以自行学习
  2. 这样当操作数据库抛出唯一约束的异常后,就可以在这里被捕获到,可以向用户抛出你自定义的友好提示
@ControllerAdvice
public class ControllerException {
    @ResponseBody
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public AjaxResult sqlUniqueException(SQLIntegrityConstraintViolationException e) {
        //将错误信息返回给前台
        return AjaxResult.error("数据重复请确认");
    }
}

标签:AjaxResult,return,数据,Spring,数据库,public,add,异常,捕获
From: https://blog.51cto.com/u_14958144/9127259

相关文章

  • 数据库索引
    一、索引的基本概念数据库索引是一种数据结构,用于快速定位到表中的数据记录。通过创建索引,数据库系统可以快速找到需要的数据,避免全表扫描,从而大大提高查询速度。索引的创建和使用需要占用额外的存储空间,并会影响数据插入、更新和删除操作的性能。因此,索引的使用需要权衡利弊,根据实......
  • Windows平台安装MongoDB数据库
    一、前言MongoDB是一种流行的文档型NoSQL数据库,它具有高性能、高可用、可伸缩性等优点,因此被广泛应用于web应用程序、分布式系统、云计算等领域。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类......
  • springsecurity 使用浅谈(一)
    1.背景springsecurity框架主要用于Web应用的认证和授权。所谓认证就是验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户。而授权就是经过认证后判断当前用户是否有权限进行某个操作。认证和授权也是SpringSecurity作为安全框架的核心功能。2.前置知识在......
  • STM32-IC(Input Capture)输入捕获
    电平跳变(上升沿或下降沿),可以通过程序配置,发生电平跳变时,输入捕获电路会让当前CNT计数器的值锁存到CCR,锁存CCR的意思就是把当前CNT的值读出来,写入CCR中。1、IC(InputCapture)输入捕获。2、输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测......
  • RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及事务消息收发、最大重试消费
    欢迎关注公众号:【11来了】发送“资料”可以下载Redis、JVM系列文章PDF版本!作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!事务消息收发流程如下:发送给MQ一条任务操作MQ的Broker成功收到后,那么发送方就开始执行原子db业务如果执行原子......
  • SpringBoot框架中的DAO层、Entity层、Service层、Controller层
    非原创,看了许多篇博客的总结一般的项目模块中都有DAO、Entity、Service、Controller层。 Entity层是实体层,也就是所谓的model,也称为pojo层,是数据库在项目中的类,该文件包含实体类的属性和对应属性的set、get方法; DAO层=mapper层,现在用Mybatis逆向工程生成的mapper层,其实就是......
  • mysql数据库(2)
    一、B树、B+树官方文档里说到,B树根节点指向叶子节点,但是人们忘了叶子节点可以互相指向,于是B+。createtablet1(aintprimarykey,bint,cint,dint,evarchar(20))engine=InnoDB;操作系统页单位4KB,mysql页单位16KB(逻辑单位,逻辑上一次取这么大)。如果按行读取时,相当于......
  • SpringBoot的Controller,Service,Repository层的使用
    找回熟悉的Controller,ServiceController哪儿去了?对于很多习惯了Spring开发的同学来讲,Controller,Service,DAO这些套路突然间都没了会有不适感。其实呢,这些东西还在,只不过对于较简单的情景下,这些都变成了系统背后帮你做的事情。这一小节我们就先来看看如何将Controller再召唤回......
  • spring自动注入中byName和byType
    spring自动注入中byName和byType1,byName:其实byName根据被注入的名称作为bean名称作为依赖查找,并将对象设置到该属性。(根据bean的id进行查找)首先创建Student类:publicclassStudent{  privateStringname;  privateStringid;  @Override  publicStringtoS......
  • springMVC的常见注解,以及注解的作用。@Controller,@RestController,@RequestMapping,@
    目录注:使用注解,必须要开启注解包扫描1.@Controller2.@RequestMapping3.@PathVariable4.@RequestParam5.@RequestHeader6.@CookieValue7.@RequestBody该注解的作用8.@ResponseBody9.@RestController注:使用注解,必须要开启注解包扫描在MVC核心配置中开启注解包扫描<!--  配置包......