统一异常处理

只谈情不闲聊 提交于 2020-01-17 01:15:06

统一异常处理

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();
	}
}

枚举类以及统一返回结果的写法

链接: 统一返回结果及枚举类.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!