码迷,mamicode.com
首页 > 其他好文 > 详细

统一异常处理

时间:2019-10-06 15:04:50      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:扫描   opera   class   message   operation   查询   枚举   inf   异常类   

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种情况就测试完啦!

统一异常处理

标签:扫描   opera   class   message   operation   查询   枚举   inf   异常类   

原文地址:https://www.cnblogs.com/liuyi13535496566/p/11627155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!