【项目实战】06-后台系统新增员工信息(全局异常处理器)

注:本文章基于黑马程序员相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!



需求分析

后台系统中可以管理员工信息,通过新增员工来添加后台系统用户。点击【添加用户】按钮跳转到新增页面

新增员工,实际上就是将我们新增页面录入的员工数据插入到employee表,需要注意,employee表中对uername字段加入了唯一约束,因为username是员工的登录账号,所以必须是唯一的;

employee表中的status字段已经设置了默认值为1,表示状态正常;

一、代码开发

执行过程:

  1. 页面发送ajax请求,将新增员工页面中输入的数据以json形式提交到服务端;
  2. 服务端Controller接受页面提交的数据并调用Service将数据进行保存;
  3. Service调用Mapper操作数据库,保存数据

对新增员工编写相应的控制层代码:
将前端传入的新增用户数据封装成一个Employee对象,然后对employee对象补充好其它插入需要的信息值,使用employeeService的save方法进行插入;

 /*
      新增员工
     */
    @PostMapping
    public R<String> save(HttpServletRequest request,@RequestBody Employee employee){
    
    
        log.info("输出员工信息{}",employee.toString());

        //设置初始密码为123456,需要进行md5加密
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));

        //设置创建时间
        employee.setCreateTime(LocalDateTime.now());
        //设置更新时间
        employee.setUpdateTime(LocalDateTime.now());

        //获得当前登录用户的id
        Long empId = (Long) request.getSession().getAttribute("employee");
        employee.setCreateUser(empId);
        employee.setUpdateUser(empId);

        employeeService.save(employee);



        return  R.success("新增员工成功!");


    }

插入成功后,在数据库可以看见插入的数据,说明新增员工没有问题
在这里插入图片描述
下面的一条为新增数据:
在这里插入图片描述


二、全局异常处理器

当我们在新增员工时输入的账号已经存在,由于employee表中对该字段加入了唯一约束,此时程序会抛异常;

此时需要我们的程序进行异常捕获,通常有两种方式:

  1. 在Controller方法中加入try、catch进行异常捕获;
  2. 使用异常处理器进行全局异常捕获;

使用第一种方式需要在每一个可能抛异常的位置加入try-catch语句,较为麻烦,所以我们采取第二种方式,设置全局异常处理器GlobalExceptionHandler.java,
(1)首先使用@ControllerAdvice注解将含有指定注解的controller方法进行标明处理
(2)然后使用@ExceptionHandler异常处理器注解表明该方法是处理何种异常
(3)最后在标明的异常处理方法中判断所报的错误信息中是否含有已知的类似Duplicate entry错误,对错误信息进行判断输出;

/**
 * @author pojo123
 * @create 2022-04-30 17:42
 * 全局异常处理器
 */

@ControllerAdvice(annotations = {
    
    RestController.class, Controller.class
})//处理类上面加了@RestController和@controller注解的controller
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
    
    
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)//处理此种异常方法
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
    
    
        log.info(ex.getMessage());

//        username重复一般报错信息为:Duplicate entry 'zhangsan' for key 'idx_username'
        if (ex.getMessage().contains("Duplicate entry")){
    
    //看错误信息中是否包含Duplicate entry字符串

            String[] split=ex.getMessage().split(" ");
            String msg=split[2]+"已存在";
            return R.error(msg);


        }
        return R.error("未知错误");
    }


}

运行项目,在新增员工表单中新增一个已存在的username ,能够正常返回所指定的异常信息;
在这里插入图片描述




总结:

在本节中我们对后台新增员工信息作了处理,并新增了全局异常处理器,如果插入数据出错,且为我们既定好的错误,那么就会按照规定的方式进行异常处理,并将信息返回给前端数据;


如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47418550/article/details/124515032