统一异常处理

Posted liuyi13535496566

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统一异常处理相关的知识,希望对你有一定的参考价值。

1.

全局异常处理

在项目中所有的异常都经过一个方法出来;都通过一个方法捕获;

特殊异常处理

指定特殊的异常捕获;

自定义异常处理

这个异常不是系统中运行时的Bug, 而是根据业务自己定义的异常操作;

例如:用户对API进行非法的操作;
item = itemId = 1 / 100000

If(item == null)

New Throws(Exception().code(20002),message(“没有此商品”))

2.配置一个config,项目启动时扫描

@EnableTransactionManagement
@MapperScan("com.atguigu.manager.mapper")
@ComponentScan("com.atguigu.manager.exception")
@Configuration
public class AllConfig



3.配置全局异常类
@ControllerAdvice
public class GlobalException

/**
* 异常处理:捕获 Exception 异常的
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e)
e.printStackTrace();
return R.error();


/**
* 除数不能为0异常
* @param e
* @return
*/
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public R errorArithmetic(ArithmeticException e)
e.printStackTrace();
return R.error().message("除数不能为0");


/**
* 自定义异常
* @param e
* @return
*/
@ExceptionHandler(PersonException.class)
@ResponseBody
public R errorArithmetic(PersonException e)
e.printStackTrace();
return R.error().message(e.getMessage()).code(e.getCode());

4.自定义异常
@Data
@ApiModel("自定义异常")
public class PersonException extends RuntimeException

@ApiModelProperty(value = "状态码")
private Integer code;

/**
* 接受状态码和消息
* @param code
* @param message
*/
public PersonException(Integer code, String message)
super(message);
this.code=code;


/**
* 接收枚举类型
* @param resultCodeEnum
*/
public PersonException(ResultCodeEnum resultCodeEnum)
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();




5.测试异常方法
/*
* 查询方法
* */
@ApiOperation(value = "person1删除数据")
@ResponseBody
@GetMapping("/selectOnePerson/id")
public R selectOnePerson(@ApiParam(name="id", value = "personID", required = true) @PathVariable("id") Integer id)

//int i= 1/0;
Person person = personServer.selectOne(id);
if(person ==null)
throw new PersonException(200002,"此人物不存在");

return R.ok().data("person",person);



将 除数不能为0异常隐藏掉,则会被第一次捕获,抛未知错误异常

技术图片

 

否则放开 i=1/0

技术图片

 

隐藏 i =1/0

技术图片

 

 以上3种情况就测试完啦!

以上是关于统一异常处理的主要内容,如果未能解决你的问题,请参考以下文章

统一异常处理

开发之统一异常处理

统一异常处理

SpringBoot初始教程之统一异常处理

SpringBoot初始教程之统一异常处理

SSM异常统一处理