统一异常处理

统一异常处理

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

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

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

发布了33 篇原创文章 · 获赞 15 · 访问量 1529
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览