为了统一异常处理,不让报错信息接口返回,我们需要对异常做统一处理,包括自己定义的异常类型和未知异常。
1、创建统一异常管理枚举类
ResultEnum.java:
package com.szl.common;
/**
* 返回信息统一管理
* @author szl
* @date 2018年6月30日 下午9:28:27
*
*/
public enum ResultEnum {
UNKNOWN_ERROR("-1", "系统错误"),
SUCCESS("0", "成功"),
FAIL("1", "失败"),
;
private String code;
private String msg;
ResultEnum(String code, String msg){
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
在该枚举类中定义自己的异常,返回状态码和信息,方便统一管理。
2、创建自定义异常处理类
ThrowsException.java:
package com.szl.exception;
import com.szl.common.ResultEnum;
/**
* 自定义异常
* @author szl
* @date 2018年6月30日 下午9:16:13
*
*/
public class ThrowsException extends RuntimeException{
private String code;
public ThrowsException(ResultEnum resultEnum){
super(resultEnum.getMsg());
this.code = resultEnum.getCode();
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
在类中通过抛出异常的方式,可以返回想要返回给前端的信息,信息通过枚举类统一管理
throw ThrowsException(UNKNOWN_ERROR);
3、全局异常处理类
创建全局异常处理类,对自定义和未知异常进行统一处理:
GloabException.java:
package com.szl.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.szl.common.ResultEnum;
import com.szl.vo.ResultVo;
/**
* 统一异常处理
* @author szl
* @date 2018年6月30日 下午9:03:30
*
*/
@RestControllerAdvice
public class GloabException {
private static final Logger logger = LoggerFactory.getLogger(GloabException.class);
@ExceptionHandler(value = Exception.class)
public ResultVo handler(Exception e){
if(e instanceof ThrowsException){
ThrowsException throwsException = (ThrowsException) e;
return ResultVo.get(throwsException.getCode(), throwsException.getMessage());
}else{
logger.error("【系统异常】{}", e);
return ResultVo.get(ResultEnum.UNKNOWN_ERROR);
}
}
}
在需要抛出异常的地方抛出自定义异常,全局统一异常处理类捕获并进行处理,统一返回类型。