设为首页 加入收藏

TOP

快速搭建SpringBoot3.x项目(六)
2023-09-23 15:44:18 】 浏览:192
Tags:SpringBoot3.x 项目
处理麻烦,对用户来说也不太友好

我们都希望不用写过多的重复代码处理异常,又能提升用户体验。

这时候全局异常处理就显得很便捷很重要了

小伙伴们如果对异常还不熟悉的可以看看这篇文章

https://blog.csdn.net/rong09_13/article/details/128090748

Springboot对于异常的处理也做了不错的支持,它提供两个注解供我们使用

  • @ControllerAdvice注解 :用来开启全局的异常捕获
  • @ExceptionHandler注解:说明捕获哪些异常,对那些异常进行处理
@ControllerAdvice
public class MyExceptionHandler {

    @ExceptionHandler(value =Exception.class)
	public String exceptionHandler(Exception e){
		System.out.println("发生了一个异常"+e);
       	return e.getMessage();
    }
}

7.1 添加自定义异常与其他异常返回结果

我们在Result 类中添加如下两个方法来处理自定义异常和其他异常返回结果

//自定义异常返回的结果
public static <T> Result<T> bussinessErr(BusinessException e) {
    Result<T> result = new Result<>();
    result.setCode(e.getErrorCode());
    result.setMsg(e.getErrorMsg());
    result.setData(null);
    return result;
}
//其他异常处理方法返回的结果
public static <T> Result<T> otherErr(ResultCode resultCode) {
    Result<T> result = new Result<>();
    result.setCode(resultCode.getCode());
    result.setMsg(resultCode.getMsg());
    result.setData(null);
    return result;
}

7.2 自定义异常

新建com.xiezhr.exception包,并自定义异常类

public class BusinessException  extends RuntimeException{
    private String errorCode;
    private String errorMsg;

    public BusinessException() {

    }

    public BusinessException(String errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }

}

7.3 全局异常处理

我们自定义一个全局异常处理类,来处理各种异常,包括自己定义的异常内部异常

这样可以简化不少代码,不用自己对每个异常都使用try,catch的方式来实现

我们在com.xiezhr.exception 包下面添加全局异常处理类GlobalExceptionHandler

@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 处理自定义异常
     *
     */
    @ExceptionHandler(value = BusinessException.class)
    @ResponseBody
    public<T> Result<T> bizExceptionHandler(BusinessException e) {
        return Result.bussinessErr(e);
    }

    /**
     * 处理其他异常
     *
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result exceptionHandler(Exception e) {
        return Result.otherErr(ResultCode.INTERNAL_SERVER_ERROR);
    }

}

7.4 测试异常处理

我们在SysUserController 中添加如下代码来测试下异常,看看能不能捕获到

@RequestMapping("/getBusinessException")
public Result DeException(){
    throw new BusinessException("400","我出错了");
}
@RequestMapping("/getException")
public Result Exception(){
    Result result = new Result();
    int a=1/0;
    return result;
}

自定义异常捕获返回

其他异常捕获与返回

八、添加系统日志

日志记录应用程序的运行状态,通过日志开发者可以更好的了解应用程序的运行情况

当系统出现bug时,也能通过日志快速定位问题和解决问题

8.1 常用日志框架

① 常用日志框架

JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…

② 日志框架之间的关系

日志框架的设计类似于JDBC-数据库驱动的设计,提供了统一的接口抽象层,然后再由各个数据库厂商去实现它,

从而实现连接不同数据库(Oracle、MySQL、PostgreSQL、MongoD...)

日志门面(日志抽象层) 日志实现
JCL
SLF4j
jboss-logging
Log4j
JUL(java.util.logging)
Log4j2
Logback

我们需要需要选择一个日志门面 和日志实现

springboot 默认选用SLF4jLogback

8.2 日志常用配置

① 日志输出分析

默认日志输出

  • 日期时间:精确到毫秒
  • 日志级别:TRACE|DEBUG|INFO|WARN|ERR
  • 进程ID:60236
  • 分隔符:默认以---进行分割
  • 线程名:由中括号括起来,如[ main]
  • Logger名: 一般使用类名
  • 日志内容

② 日志级别

日志级别由低到高如下

TRACE < DEBUG< INFO< WARN < ERROR

如果设置为 WARN ,则低于 WARN 的信息

首页 上一页 3 4 5 6 7 下一页 尾页 6/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JDK8升级JDK11最全实践干货来了 下一篇快速搭建linux centos 部署环境及..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目