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

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

一、没有做异常处理


     

在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

相关文章
|
8月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
213 0
|
5月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录是一个重要而复杂的问题。
微信小程序作为业务拓展的新渠道,其全栈开发涉及前端与后端的紧密配合。本文聚焦小程序开发中的异常处理与日志记录,从前端的网络、页面跳转等异常,到后端的数据库、API调用等问题,详述了如何利用try-catch及日志框架进行有效管理。同时强调了集中式日志管理的重要性,并提醒开发者注意安全性、性能及团队协作等方面,以构建稳定可靠的小程序应用。
79 1
|
小程序 Java 关系型数据库
0012Java程序设计-springboot基于微信小程序的校园智慧帮系统的设计与实现
0012Java程序设计-springboot基于微信小程序的校园智慧帮系统的设计与实现
161 0
|
7月前
|
监控 数据管理 Java
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
智慧城管执法系统利用微服务和Java技术提升城市管理水平,涵盖事件处理、投诉、处罚等功能,包含PC和APP源码。系统支持执法APP,便于领导随时随地审批,具备文书模板、地图定位、法规查询等功能。此外,执法办案系统通过监控视频分析事件,实现案件全程闭环管理,包括组织、案件、信用和执法队伍管理,以及法规库等基础支撑。系统旨在优化流程,提高数据管理和效率。
161 3
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的传统戏曲推广微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的传统戏曲推广微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
8月前
|
前端开发 JavaScript 开发者
前端技术栈:探索现代Web开发的核心要素与代码实践
前端技术栈:探索现代Web开发的核心要素与代码实践
252 1
|
Java Spring
谷粒学苑项目实战(六):统一日志处理
日志记录器(Logger)的行为是分等级的。如下表所示:分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别。
118 0
谷粒学苑项目实战(六):统一日志处理
|
前端开发 JavaScript
谷粒学苑项目实战(七):搭建前端页面
谷粒学苑项目实战(七):搭建前端页面
185 0
谷粒学苑项目实战(七):搭建前端页面
|
前端开发 API
谷粒学苑项目实战(八):实现登录功能
前面我们已经搭建了前端环境,运行起来后是可以看见登录框的,但是由于后端没有写东西,不能成功登录,今天我们就完成这个功能。
211 0
谷粒学苑项目实战(八):实现登录功能