项目异常统一处理遇到的错误

错误说明:

1. 功能介绍:电商项目目前做到用户注册,想完成的异常处理是当用户名重复时,提示用户名重复错误。

2. 异常统一处理文件:新建GlobalExceptionHandler类,用来拦截Controller层抛出的异常,暂时有两个方法,方法1接受mallException处理业务异常,方法2接受Exception异常处理系统异常。

@ExceptionHandler(mallException.class)
@ResponseBody
public Object handServiceException(mallException e){
    return ApiRestResponse.error(e.getCode(), e.getMessage());
}

@ExceptionHandler(Exception.class)
@ResponseBody
public Object handSystemException(Exception e){
    return ApiRestResponse.error(mallExceptionEnum.SYSTEM_ERROR);
}

3. 错误点:接口测试重复用户名时,理论上应该执行业务异常处理方法,返回业务处理异常的提示,但执行的缺是系统异常处理方法 ,返回的是系统异常提示。

查找错误:

排查了Controller,Service层代码均未发生错误,debug显示Controller层抛出的也是mallException类型。

最后发现mallException类继承错误

源代码:public class mallException extends Throwable

更改后:public class mallException extends Exception

错误原因:

在 Java 中,Throwable 是所有错误和异常的父类,但在Spring的异常处理机制中,只有继承自 Exception ,或者更具体的继承自 RuntimeException 的异常才会被 @ExceptionHandler 处理。

注解学习:统一异常处理使用的几个常用注解

  1. @ControllerAdvice:这个注解是用来标注一个全局的异常处理类的,但它不包含 @ResponseBody 的效果,也就是说,它可以同时适用于处理返回视图和返回JSON的方法。

  2. @ExceptionHandler:这个注解主要是标注一个方法,表示这个方法用来处理某一种(或多种)异常。这个方法的参数通常是一个或多个 Exception 类、子类或者其他被检测的异常类型。如果这个方法有返回值,那么这个返回值会被 @ResponseBody 处理。

  3. @ResponseBody:这个注解的作用是将方法返回的对象转化为JSON字符串,然后发送给客户端。这个昨天在Controller层开发的时候也用到了

  4. 还有一个更好的注解:@RestControllerAdvice =@ControllerAdvice+@ResponseBody 用来标注全局的异常处理类,标注完以后就不用再每个方法上都标注@ResponseBody了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值