瑞吉外卖实战学习--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、效果

相关推荐
天桥下的卖艺者28 分钟前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
似的8351 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
隔窗听雨眠1 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
数据库小学妹1 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
fanged1 小时前
总线学习3--SPI番外(TODO)
学习
mldong2 小时前
从 mldong 到 jeeflow:一个工作流引擎的独立进化
后端
陈随易2 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
神龙天舞20012 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
Aaron - Wistron3 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
ThsPool3 小时前
【遥感学习整理 02】ENVI遥感图像处理基础:从数据读取到遥感信息产品
图像处理·人工智能·学习