SpringBoot框架 – 异常封装初始化
第一步:结构-创建文件和类
第二步:书写异常封装实现
公用异常接口
代码
package com.springboot.demo.common.error;
public interface CommonError {
public int getCode();
public String getErrMsg();
public CommonError setErrMsg(String errMsg);
}
图示
实现公用异常接口
代码
package com.springboot.demo.common.error;
public enum EmBusinessError implements CommonError {
// 全局错误码
// 10000 开头为用户信息相关错误定义
USER_NOT_EXIST(10001,"用户不存在"),
//通用错误码
PARAMATER_VALIDATION_ERROR(90001,"参数错误"),
;
private int errCode;
private String errMsg;
private EmBusinessError(int errCode, String errMsg) {
this.errCode=errCode;
this.errMsg=errMsg;
}
@Override
public int getCode() {
return this.errCode;
}
@Override
public String getErrMsg() {
return this.errMsg;
}
@Override
public CommonError setErrMsg(String errMsg) {
this.errMsg = errMsg;
return this;
}
}
图示
继承 异常类构建异常自定义封装
代码
package com.springboot.demo.common.error;
/**
* 〈一句话功能简述〉<br>
* 〈功能详细描述〉
*
* @author 88450572
* @date 2019/10/16 11:15
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class BusinessError extends Exception implements CommonError{
private CommonError commonError;
//直接接收EmbusinessError的传参用于构造函数异常
public BusinessError(CommonError commonError){
super();
this.commonError = commonError;
}
//接收自定义 errmsg的方式构造业务异常
public BusinessError(CommonError commonError,String erMsg){
super();
this.commonError=commonError;
this.commonError.setErrMsg(erMsg);
}
@Override
public int getCode() {
return this.commonError.getCode();
}
@Override
public String getErrMsg() {
return this.commonError.getErrMsg();
}
@Override
public CommonError setErrMsg(String errMsg) {
this.commonError.setErrMsg(errMsg);
return this;
}
}
图示
第三步 :定义异常处理器。拦截所有异常请求
代码
package com.springboot.demo.controller;
import com.springboot.demo.common.response.CommonReturnType;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseController {
// 定义异常类
@ExceptionHandler(Exception.class)
// 获取异常返回200
@ResponseStatus(HttpStatus.OK)
@ResponseBody//返回json
public Object handleException(HttpServletRequest request, Exception ex) {
// 模块抛出异常,被注解exceptionHandle拦截到进入此类,状态设置200 返回null;
CommonReturnType commonReturnType = new CommonReturnType();
commonReturnType.setStatus("fail");
commonReturnType.setData(ex);
return commonReturnType ;
}
}
图示
自定义异常校验或者debuger测试
如果拦截返回json数据
启动容器校验
备注:异常处理器正常运行,使用自定义异常封装类融合
第四步:测试异常
package com.springboot.demo.controller;
import com.springboot.demo.common.error.BusinessError;
import com.springboot.demo.common.error.EmBusinessError;
import com.springboot.demo.common.response.CommonReturnType;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
public class BaseController {
// 定义异常类
@ExceptionHandler(Exception.class)
// 获取异常返回200
@ResponseStatus(HttpStatus.OK)
@ResponseBody//返回json
public Object handleException(HttpServletRequest request, Exception ex) {
// 模块抛出异常,被注解exceptionHandle拦截到进入此类,状态设置200 返回null;
Map<String, Object> map = new HashMap<>();
// 判断ex是否BusinessError异常
if (ex instanceof BusinessError) {
// 强转为自定义异常
BusinessError businessError = (BusinessError) ex;
map.put("errCode", businessError.getCode());
map.put("errMsg", businessError.getErrMsg());
} else {
map.put("errCode", EmBusinessError.UNKNOWN_ERROR.getCode());
map.put("errMsg", EmBusinessError.UNKNOWN_ERROR.getErrMsg());
}
return CommonReturnType.create(map, "fail");
}
}
运行
若id没有找到,为空进入判断,自定义抛出异常
运行