学习Spring MVC框架中的异常处理

在Spring MVC中有两个级别的异常处理方式:

  • Controller级别: 它只能处理当前Controller类中出现的异常。
  • 全局的异常处理级别:所有的Spring MVC中的拦截机器(HandlerInterceptor),处理器(@Controller)中的异常。

Spring MVC中有内置的异常处理对象,但是呈现的结果对于用户端感受不友好,所以实际项目我们一般会自定义异常处理。

全局异常处理对象的定义

在spring boot启动类所在的包或子包中定义Spring MVC全局异常处理类,这个类的特点是需要使用 RestControllerAdvice注解进行描述,并且可以在类中定义多个异常处理方法(需要使用@HandlerException 注解进行描述)

/**
 * RestControllerAdvice 描述的类型为一个全局异常处理对象类型,
 * 当某个Controller方法中出现了异常,此时在Controller类内部,又没有定义对应的
 * 异常处理方法(使用ExcetpionHandler注解描述的方法),系统底层就会查找有没有定义全局异常处理对象。
 * 这个全局异常处理对象中有没有定义对应的异常处理方法,假如有就调用此方法处理异常。
 */

@Slf4j //lombok提供的日志注解,在代码层面会提供一个org.slf4j.Logger对象
@RestControllerAdvice //=@ControllerAdvice+@ResponseBody
public class GlobalExceptionHandler {
    //private static final Logger log= LoggerFactory.getLogger(GlobalExceptionHandler.class);
    /**
     *  @ExceptionHandler 描述的方法为一个异常处理方法,在此注解内部可以定义具体的异常处理
     *  类型(例如RuntimeException.class),此注解描述的方法需要定义一个异常类型的形式参数,
     *  通过这个参数接收具体的异常对象(也可以接收其异常类型对应的子类类型的异常)。
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    public ResultVO doHandleRuntimeException(RuntimeException ex){
        log.error("error is {}",ex.getMessage());//日志级别trace<debug<info<warn<error
        //log中的{}为占位符,后面的ex.getMessage()返回的信息,会显示到{}这个位置
        return new ResultVO(0,ex.getMessage());
    }
}

@Slf4j注解为Lombok提供,此注解描述类时会在类中创建一个日志对象,基于日志对象可以输出一些日志, 日志的级别可以在application.properties文件中进行配置,例如logging.level.cn.tedu=debug,这里的debug 表示日志级别(trace<debug<info<warn<error),当配置的日志界别为debug时,当前这个日志级别以及比这个日志级 别高的日志级别会输出日志。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值