谷粒学苑项目实战(五):统一异常处理

简介: 谷粒学苑项目实战(五):统一异常处理

一、没有做异常处理


     

在controller中的随便一个方法中加一个异常

24deff7ff5d54855875a75a42aa8909a.png


然后在swagger中测试


938c38dc79a54de1896beb6487f37db1.png


可以看到有默认的异常处理方式。

     

那我们想要自定义异常处理方式,比如返回一些友好的提示,该如何去做呢?


二、全局统一处理



1、创建统一异常处理类

       

在service-base中创建exceptionhandler包,在包下创建统一异常处理类GlobalExceptionHandler.java:

 

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody    //为了返回数据
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常方法");
    }
}


2、注意循坏依赖

     

因为要使用R做统一数据返回,所以要在 service-base 中引入common_utils的依赖;


同时,我们在service中同时引入了service_base和common_utils,现在service-base中已经有了common_utils,所以我们需要在service中把common_utils的依赖删掉,避免重复引入。


3、测试


e2bc27e009b1447bb74f300c980ebc24.png


可以看到,并没有报错(这说明前端不会显示巨丑的报错页面),而是返回了我们定义的友好提示。


三、特定异常处理


     

现在我们希望对一些特定的异常,抛出特定的提示。


其实在实际开发中用到的并不是很多,因为我们往往不清楚程序会报什么异常。

     

比如还是这个除数为0的ArithmeticException错误


1、代码

@ExceptionHandler(ArithmeticException.class)
    @ResponseBody    //为了返回数据
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了ArithmeticException异常处理方法");
    }


2、测试


51c7d9c6695c438eb3d3eb1ee1d3a2f9.png

可以看到返回的不再是全局异常处理方法,而是我们为这个异常特定的提示。


三、自定义异常处理


     

现在我们想自定义自己的异常处理方法


1、代码


新建一个GuliException类


@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuliException extends RuntimeException{
    private Integer code;   //状态码
    private String msg;     //异常信息
}


2、变为全局异常


在GlobalExceptionHandler类中加上这个异常

@ExceptionHandler(GuliException.class)
    @ResponseBody    //为了返回数据
    public R error(GuliException e){
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }


3、抛出


由于不是官方给出的异常,系统不会自动抛出,我们需要自己手动抛出

try {
            int n = 10 / 0;
        } catch (Exception e) {
            throw new GuliException(20001, "执行了自定义异常处理");
        }

67cd0651cda34ebe9aed1443ce626bee.png


4、测试


e63d7fb1427148538ed66b0d34e4cfc2.png

相关文章
|
3月前
|
SQL 前端开发 关系型数据库
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
2569 4
|
小程序 Java 关系型数据库
0012Java程序设计-springboot基于微信小程序的校园智慧帮系统的设计与实现
0012Java程序设计-springboot基于微信小程序的校园智慧帮系统的设计与实现
146 0
|
5月前
|
Java
java后台技术栈
java后台技术栈
41 0
|
6月前
|
前端开发 JavaScript NoSQL
开源!!!前后端分离微图书管理系统!!!附源码!!!
开源!!!前后端分离微图书管理系统!!!附源码!!!
143 0
|
小程序 测试技术 数据库
0022Java程序设计-ssm微信小程序社区互助平台
0022Java程序设计-ssm微信小程序社区互助平台
51 0
|
消息中间件 安全 NoSQL
跪了!Alibaba内部优质Springboot笔记:两大项目实战+源码解析
近年来,Spring Boot 是整个Java社区中最有影响力的项目之一,它的设计初衷是解决Spring各版本配置工作过于繁重,目前已经逐渐替代传统SSM架构。但SSM和Spring Boot并不冲突。Spring Boot更简单、更自动化,减少了传统SSM开发的配置。程序员在用Springboot开发应用程序时能做到零配置或极简配置。同时,为了不失灵活性,它也支持自定义操作。
|
Java Spring
谷粒学苑项目实战(六):统一日志处理
日志记录器(Logger)的行为是分等级的。如下表所示:分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别。
109 0
谷粒学苑项目实战(六):统一日志处理
|
前端开发 API
谷粒学苑项目实战(八):实现登录功能
前面我们已经搭建了前端环境,运行起来后是可以看见登录框的,但是由于后端没有写东西,不能成功登录,今天我们就完成这个功能。
203 0
谷粒学苑项目实战(八):实现登录功能
|
前端开发 JavaScript
谷粒学苑项目实战(七):搭建前端页面
谷粒学苑项目实战(七):搭建前端页面
177 0
谷粒学苑项目实战(七):搭建前端页面
|
Java 测试技术 数据库
谷粒学苑项目实战(二):讲师管理模块搭建(上)
谷粒学苑项目实战(二):讲师管理模块搭建
227 0
谷粒学苑项目实战(二):讲师管理模块搭建(上)