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

相关推荐
用户83562907805131 分钟前
使用 Python 自动化 PowerPoint 形状布局与格式设置
后端·python
Oneslide1 小时前
sudo免密权限配置不生效
后端
站大爷IP1 小时前
为什么Python不用var或let声明变量?
后端
赴星半途1 小时前
NestJS实战-创建AuthService
后端
北冥有鱼1 小时前
mqtt 测试
前端·后端
代码丰1 小时前
使用 TtlExecutors 解决线程池中的 ThreadLocal 上下文丢失问题
后端
阿祖zu2 小时前
别再优化 RAG 了,适配 Agent 的 LLM Wiki 知识库理念
前端·后端·aigc
昵称为空C2 小时前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
用户8356290780512 小时前
用 Python 自动化 PowerPoint 演讲者备注添加
后端·python