瑞吉外卖实战学习--6、通过try和catch进行异常处理

try和catch进行异常处理

效果图

前言

当用户名重复数据库会报错,此时就需要捕获异常操作

1、公共拦截器进行异常处理

1.1、创建公共报错处理的方法

1.2、@ControllerAdvice中设置要拦截的类

1.3、@ExceptionHandler中写处理的异常类

java 复制代码
package com.example.ruiji_demo.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @author jitwxs
 * @date 2024年03月30日 22:24
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
        return R.error("添加失败了");
    }
}

2、完善错误拦截器

获取到是否是含有Duplicate entry的错误,如果是就提取出来名称,然后添加到报错信息

java 复制代码
package com.example.ruiji_demo.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @author jitwxs
 * @date 2024年03月30日 22:24
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 异常处理方法
     * @param ex
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
//        获取到是否是含有Duplicate entry的错误,如果是就提取出来名称,然后添加到报错信息
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2] + "已存在";
            return R.error(msg);
        }
        return R.error("添加失败");
    }
}

2.1、效果

相关推荐
HaiQinyanAN几秒前
【学习笔记】重载和重写的注意事项
c++·笔记·学习
一眼万年045 分钟前
Kafka LogManager 深度解析
后端·kafka
天行健的回响6 分钟前
一次多线程改造实践:基于ExecutorService + CompletionService的并发处理优化
后端
梦境虽美,却不长19 分钟前
C语言 学习 文件操作(开关,读写,定位,大小)操作 2025年6月8日12:19:24
c语言·开发语言·学习
厚衣服_322 分钟前
第18篇:数据库中间件架构中的服务治理与限流熔断机制设计
数据库·中间件·架构
yifa2016040428 分钟前
STM32、Arduino和51单片机
stm32·学习·51单片机
盖世英雄酱5813629 分钟前
🚀不改SQL,也能让SQL的执行效率提升100倍
java·数据库·后端
陈随易38 分钟前
Bun v1.2.16发布,内存优化,兼容提升,体验增强
前端·后端·程序员
GetcharZp40 分钟前
「Golang黑科技」RobotGo自动化神器,鼠标键盘控制、屏幕截图、全局监听全解析!
后端·go
程序员岳焱41 分钟前
Java 与 MySQL 性能优化:Linux服务器上MySQL性能指标解读与监控方法
linux·后端·mysql