SpringBoot项目统一异常处理和统一日志处理

本文详细介绍了如何在SpringBoot项目中实现统一异常处理和日志处理。包括全局异常处理、特定异常处理、自定义异常处理的实现步骤,并讲解了如何配置日志级别及使用Logback进行日志输出到文件。
摘要由CSDN通过智能技术生成

SpringBoot项目统一异常处理和统一日志处理

统一异常处理

本文章介绍三种异常处理:全局异常处理、特定异常处理、自定义异常处理

1、全局异常处理

如果是父子工程,在common子工程中,创建一个子模块common-utils,在子模块下创建一个handler包,在包中创建一个ExceptionHandler(此创建可以根据个人习惯创建,因为整个项目统一异常处理,最好放在公共模块中);如果是单个工程项目,就在主包下创建一个handler包,然后创建一个GlobalExceptionHandler类

(1)全局异常处理创建GlobalExceptionHandler类
/**
 * 统一异常处理类
 */
import com.springboot1230.utils.ResultJson;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@Component
@ControllerAdvice
public class GlobalExceptionHandler {
   

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResultJson error(Exception e){
   
        e.printStackTrace();
        return ResultJson.error().message("执行了全局异常处理..");
    }
 }

代码解析:
@ControllerAdvice:可以用在全局异常处理、全局数据绑定、全局请求数据预处理
@ExceptionHandler(Exception.class):这个注解表示,异常处理器,括号中的内容是代表出现什么异常会处理,此时代表出现所有异常都会处理
@ResponseBody:为了返回数据,当出现异常时,会执行error方法,返回一个异常信息,而不是返回一个500页面

(2)测试结果

在swagger-ui中测试处理方法是否生效,在controller中随便一个方法加入一个异常,比如 int i = 2/0

//根据id查询
    @GetMapping("selectById/{id}")
    public ResultJson selectById(@PathVariable String id){
   
        EduTeacher eduTeacher = eduTeacherService.getById(id);
        int i = 2/0;
        return ResultJson.ok().data("teacher",eduTeacher);
    }

测试结果
在这里插入图片描述
在ResponseBody中显示了异常处理的信息,说明执行了异常处理方法,这样就可以给用户一个较好的项目体验。

2、特定异常处理

和全局异常处理方法一样,在上一步的GlobalExceptionHandler类中,添加一个特定异常处理方法,处理指定的异常,拿上个举例,当方法中存在 int i=2/0时控制台报这样的异常
在这里插入图片描述
方法中这样写

 //特定异常处理
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public ResultJson error(ArithmeticException e){
   
        e.printStackTrace();
        return ResultJson.error().message("执行了ArithmeticException异常处理");
    }

测试结果
在这里插入图片描述
这里有一个机制,就是当出现异常的时候,会先去找有没有这个特定的异常处理,如果没有就执行全局异常处理方法

3、自定义异常处理
(1)创建一个自定义异常类

和全局异常处理的创建方法一样,在handler包下创建一个自定义异常处理类CustomException,并继承RuntimeException类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor //生成有参数的构造方法
@NoArgsConstructor  //生成无参数的构造方法
public class CustomException extends RuntimeException {
   

    private Integer code;//状态码

    private String message;//异常信息   
}

代码解析: @Data是lombok的注解,可以自动生成get/set方法
@AllArgsConstructor :生成有参数的构造方法
@NoArgsConstructor :生成无参数的构造方法

(2)在创建自定义异常处理方法

在第一个全局异常处理类中,添加自定义异常处理方法

//自定义异常处理
    @ExceptionHandler(CustomException.class)
    @ResponseBody
    public ResultJson error(CustomException e)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值