异常消息处理
我们当前的增删改查基本完成
我们当前的情况是在理想状态下完成的
但是实际开发中我们要抛出异常
业务在进行处理的时候
数据格式就是这样
前端拿到的信息我们应该去处理
前端如何去处理得去斟酌
即使前端出现了异常
我们也要让返回的异常信息让前端成功读取
我们有一个异常处理器
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中进行消息统一处理
目的是国际化
让异常处理的时候交给后端统一处理
这样前端就能简化书写
小结