SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(3)

简介: SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】

SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)https://developer.aliyun.com/article/1534218

1.7.4、自定义异常

       我们需要建一个包 exception 来专门存放我们自定义的异常,我们每个自定义的异常应该都有自己的编码来标识,方便处理,所以我们需要在 Code 类中再添加编码(越细越好):

系统异常
package com.lyh.exception;
 
// 继承 RuntimeException 之后它就可以自动向上抛 否则我们只能手动 throws
public class SystemException extends RuntimeException{
 
    private Integer code; // 帮助识别是哪一种异常
 
    public Integer getCode() {
        return code;
    }
 
    public void setCode(Integer code) {
        this.code = code;
    }
 
    public SystemException(Integer code, String message) {
        super(message);
        this.code = code;
    }
 
    public SystemException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
 
}
业务异常
package com.lyh.exception;
 
// 继承 RuntimeException 之后它就可以自动向上抛 否则我们只能手动 throws
public class BusinessException extends RuntimeException{
 
    private Integer code; // 帮助识别是哪一种异常
 
    public Integer getCode() {
        return code;
    }
 
    public void setCode(Integer code) {
        this.code = code;
    }
 
    public BusinessException(Integer code, String message) {
        super(message);
        this.code = code;
    }
 
    public BusinessException(Integer code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
 
}
其它异常

其它异常不用单独定义。

在异常处理器中设置异常处理逻辑
// 这个类必须被 SpringMVC 加载
@RestControllerAdvice
public class ProjectExceptionAdvice {
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException e){
        // 记录日志
        // 发送消息给运维
        // 发送邮件给开发人员
        // 发送异常给开发人员
        return new Result(e.getCode(),null,e.getMessage());
    }
    
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException e){
        return new Result(e.getCode(),null,e.getMessage());
    }
 
    // 其它异常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception e){
        // 记录日志
        // 发送消息给运维
        // 返回给起那段
        return new Result(Code.SYSTEM_UNKNOWN_ERR,null,"系统繁忙,请稍后重试");
    }
}

总结

处理项目异常的步骤:

  1. 分类(自定义项目系统级、业务级异常)
  2. 自定义异常编码(越细越好)
  3. 触发异常(对可能出现异常的代码进行包装,用自定义异常类型抛出去)
  4. 扫描拦截(定义异常处理器类,这个类必须被控制器扫描,所以最好放到 controller 包下,把抛出的异常交给我们的异常处理器来处理)

1.8、前后端协议联调

1.8.1、环境准备

因为添加了静态资源,SpringMVC会拦截,所有需要在SpringConfig的配置类中将静态资源进行放行。

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
 
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}

让 SpringMVC 加载

1.8.2、列表功能(查询所有书籍)

这里前端的东西不多说,Ajax 比较简答,这里只放核心代码:

getAll() {
    //发送ajax请求
    axios.get("/books").then((res)=>{
        this.dataList = res.data.data;
    });
}

测试:

1.8.3、添加功能

打开新增面板:

handleCreate() {
    this.dialogFormVisible = true;
},

增加书籍功能:

handleAdd () {
    //发送ajax请求
    //this.formData是表单中的数据,最后是一个json数据
    axios.post("/books",this.formData).then((res)=>{
        this.dialogFormVisible = false;
        this.getAll();
    });
}

1.8.4、添加功能状态处理

修改 BookDao 接口的增删改方法的返回值为 int 类型:

修改 BookServiceImpl 实现类的返回值(原本都是不管成功失败返回 true):

设置打开添加表单时清空表单:

resetForm(){
  this.formData = {};
}
handleCreate() {
    this.dialogFormVisible = true;
    this.resetForm();
}

1.8.5、修改功能

//弹出编辑窗口
handleUpdate(row) {
    // console.log(row);   //row.id 查询条件
    //查询数据,根据id查询
    axios.get("/books/"+row.id).then((res)=>{
        if(res.data.code == 20041){
            //展示弹层,加载数据
            this.formData = res.data.data;
            this.dialogFormVisible4Edit = true;
        }else{
            this.$message.error(res.data.msg);
        }
    });
}
// ...
handleEdit() {
    //发送ajax请求
    axios.put("/books",this.formData).then((res)=>{
        //如果操作成功,关闭弹层,显示数据
        if(res.data.code == 20031){
            this.dialogFormVisible4Edit = false;
            this.$message.success("修改成功");
        }else if(res.data.code == 20030){
            this.$message.error("修改失败");
        }else{
            this.$message.error(res.data.msg);
        }
    }).finally(()=>{
        this.getAll();
    });
}

1.8.6、删除功能

handleDelete(row) {
    //1.弹出提示框
    this.$confirm("此操作永久删除当前数据,是否继续?","提示",{
        type:'info'
    }).then(()=>{
        //2.做删除业务
        axios.delete("/books/"+row.id).then((res)=>{
            if(res.data.code == 20021){
                this.$message.success("删除成功");
            }else{
                this.$message.error("删除失败");
            }
        }).finally(()=>{
            this.getAll();
        });
    }).catch(()=>{
        //3.取消删除
        this.$message.info("取消删除操作");
    });
}


相关文章
|
5月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
79 2
|
5月前
|
JSON 前端开发 程序员
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
5月前
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
|
2月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统
|
5月前
|
前端开发 JavaScript Java
计算机Java项目|SSM智能仓储系统
计算机Java项目|SSM智能仓储系统
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
34 0
|
3月前
|
SQL Java 应用服务中间件
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
这篇文章是关于如何使用SSM框架搭建图书商城管理系统的教程,包括完整过程介绍、常见问题解答和售后服务,提供了项目地址、运行环境配置、效果图展示以及运行代码的步骤。
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
|
4月前
|
存储 关系型数据库 测试技术
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)(2)
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)
63 1
|
5月前
|
前端开发
杨校老师之基于SSM开发的校园点餐配送系统
杨校老师之基于SSM开发的校园点餐配送系统
60 0
杨校老师之基于SSM开发的校园点餐配送系统