统一异常处理
1,创建统一异常处理类
package com.xindong.common.handler;
/**
* 统一异常处理类
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error();
}
}
@ExceptionHandler(BadSqlGrammarException.class)
@ResponseBody
public R error(BadSqlGrammarException e){
e.printStackTrace();
return R.codeEnum(ResultCodeEnum.BAD_SQL_GRAMMAR);
}
@ExceptionHandler(MyException.class)
@ResponseBody
public R error(MyException e){
e.printStackTrace();
return R.error().message(e.getMessage()).code(e.getCode());
}
- 解释:
- 这里的 R 是统一返回结果
- 像第二个,这里是接受特定的特定的异常,一般都是走Exception,但若是写了他的子类,报了此类一场的话,优先走子类。
- 另外,这个统一返回结果的异常我都写到枚举里了,具体见下面。
2、扫描异常处理器
- 在Application.java上添加注解@ComponentScan
(因为是分布式项目,这些统一的配置都是在common服务里写的,具体的逻辑实在edu写的,所以要加上这个包扫描器,不然的话这些注解都会扫描不到,会报错!!!)
@SpringBootApplication
@ComponentScan(basePackages={"com.xindong.edu","com.xindong.common"})
public class Application {
SpringApplication.run(EduApplication.class, args);
}
自定义异常类
package com.xindong.common.exception;
@Data
@ApiModel(value = "全局异常")
public class MyException extends RuntimeException {
@ApiModelProperty(value = "状态码")
private Integer code;
/**
* 接受状态码和消息
* @param code
* @param message
*/
public MyException (Integer code, String message) {
super(message);
this.code=code;
}
/**
* 接收枚举类型
* @param resultCodeEnum
*/
public MyException (ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
}
}
枚举类以及统一返回结果的写法
链接: 统一返回结果及枚举类.
来源:CSDN
作者:不換
链接:https://blog.csdn.net/qq_17589751/article/details/104010828