SSMP整合案例第七步 前后端业务异常消息统一处理

发布于:2024-06-04 ⋅ 阅读:(99) ⋅ 点赞:(0)

异常消息处理

我们当前的增删改查基本完成

我们当前的情况是在理想状态下完成的

但是实际开发中我们要抛出异常

业务在进行处理的时候

数据格式就是这样

前端拿到的信息我们应该去处理

前端如何去处理得去斟酌

即使前端出现了异常

我们也要让返回的异常信息让前端成功读取

我们有一个异常处理器

Spring MVC 属于 controller 层的技术

放这里就行

定义全新的数据访问格式

package com.bigdata1421.ssmp.controller.utils;

import lombok.Data;

@Data
public class Result {
    private Boolean flag;
    private Object data;
    private String msg;
    public Result(Boolean flag){
        this.flag=flag;
    }
    public Result(Boolean flag,Object data){
        this.flag=flag;
        this.data=data;
    }

    public Result(Boolean flag,String msg){
        this.flag=flag;
        this.msg=msg;
    }

}

也可以这样改写

异常处理类

package com.bigdata1421.ssmp.controller.utils;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

//作为 spring mvc 的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {

    @ExceptionHandler
    public Result doException(Exception ex){
        //记录日志
        //通知运维
        //通知开发
        ex.printStackTrace();
        return new Result(  "服务器故障,请稍后重试");
    }

}

Result类

package com.bigdata1421.ssmp.controller.utils;

import lombok.Data;

@Data
public class Result {
    private Boolean flag;
    private Object data;
    private String msg;
    public Result(Boolean flag){
        this.flag=flag;
    }
    public Result(Boolean flag,Object data){
        this.flag=flag;
        this.data=data;
    }

    public Result(String msg){
        this.flag=false;
        this.msg=msg;
    }

}

这样就能拿到报错信息

//修改
handleEdit() {
    //与添加功能绑定的是一个数据模型
    //绑定的是确定按钮 发起请求
    axios.put("/users", this.formData).then((res) => {
        //判断当前操作是否成功
        if (res.data.flag) {
            //关闭弹层
            this.cancel();
            this.$message.success("人员数据修改成功");
        }else {
            this.$message.error(res.data.msg);
        }
    }).finally(()=>{
        //重新加载页面
        this.getAll();
    });
},

空体判断

抛出异常给Spring mvc的异常消息处理机制

但是这样我们的代码有的是在前端页面中写的

有的是在服务器的三层架构里写的 这样不好

这样不好

先是异常处理

之后是代码核心逻辑处理

判断flag是否为ture 还是false 添加成功

进阶版

页面消息处理

没有传递消息加载默认消息

传递消息后加载指定消息

我们后端和前端都要进行处理

我们主要是在表现层Controller中进行消息统一处理

目的是国际化

让异常处理的时候交给后端统一处理

这样前端就能简化书写

小结


网站公告

今日签到

点亮在社区的每一天
去签到