1、自定义一个异常类,继承运行时异常,可以用try--catch捕获该自定义异常
/**
* @author <a href="mailto:Tastill">Tastill</a>
* @version 2019/11/29 9:47
* @description 外网异常抛出统一方法
*/
public class WwException extends RuntimeException{
private String code;
private String msg;
public WwException(String code) {
this.code = code;
}
public WwException(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2、全局异常统一处理
①通过@ControllerAdvice注解增强实现Controller接口类
②通过 @ExceptionHandler
自定捕获的异常类型。
③通过 @ResponseBody
返回 json
到前端。
注:
①被@ControllerAdvice
注解的全局异常处理类也是一个 Controller
,我们需要配置扫描路径,确保能够扫描到这个Controller。说白了,这个抛出异常的方法,最顶层调用一定要是cotroller层。
②该注解捕获异常方法优先级低于AOP拦截的方法catch异常捕获。意思就是如果是AOP拦截,如果有异常,会先进AOP拦截的catch异常捕获方法里,如果在catch里没有再次抛出,则不会进ControllerAdvice注解的增强类。
/**
* @author <a href="mailto:Tastill">Tastill</a>
* @version 2019/12/9 15:57
* @description 全局异常统一处理(运行时异常)
*/
@ControllerAdvice
public class WwExceptionResolver {
/**
* @description 处理所有不可知异常
* @param
* @return
* @version 2.0, 2019/12/9 16:49
* @author <a href="mailto:Tastill">Tastill</a>
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseMainEntity handleException(Exception e) {
String code = CodeUtil.RUNERROR;
return new ResponseMainEntity(code,"");
}
/**
* @description 处理项目抛出的异常
* @param
* @return
* @version 2.0, 2019/12/9 16:49
* @author <a href="mailto:Tastill">Tastill</a>
*/
@ExceptionHandler(WwException.class)
@ResponseBody
public ResponseMainEntity handleOpdRuntimeException(WwException e) {
String code = CodeUtil.RUNERROR;
code = e.getCode();
return new ResponseMainEntity(code,"");
}
}