统一异常处理
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种情况就测试完啦!
以上是关于统一异常处理的主要内容,如果未能解决你的问题,请参考以下文章