封装统一的返回结果类,全局异常处理类,自定义异常封装类

1. 封装统一返回结果类

/**
 * 封装统一返回结果类
 * @param <T>
 */
public class AjaxResult<T> {
    /** 是否成功 */
    private Boolean success;
    /** 状态码 */
    private Integer code;
     /** 提示信息 */
    private String msg;
     /** 数据 */
    private T data;

    public AjaxResult() {

    }

    //自定义返回结果的构造方法
    public AjaxResult(Boolean success, Integer code, String msg, T data) {
        this.success = success;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 自定义异常返回的结果
     * @param de 自定义异常封装
     * @return
     */
    public AjaxResult<T> defineError(BusinessException de) {
        AjaxResult<T> result = new AjaxResult<T>();
        result.setSuccess(false);
        result.setCode(de.getErrorCode());
        result.setMsg(de.getErrorMsg());
        result.setData(null);
        return result;
    }

    /**
     * 其他异常处理方法返回的结果
     * @param errorEnum 错误枚举
     * @return
     */
    public AjaxResult<T> otherError(ErrorEnum errorEnum) {
        AjaxResult<T> result = new AjaxResult<T>();
        result.setMsg(errorEnum.getErrorMsg());
        result.setCode(errorEnum.getErrorCode());
        result.setSuccess(false);
        result.setData(null);
        return result;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

2. 自定义异常封装类

/**
 * 自定义异常封装类
 */
public class BusinessException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    /**
     * 错误状态码
     */
    protected Integer errorCode;
    /**
     * 错误提示
     */
    protected String errorMsg;

    public BusinessException() {
    }

    public BusinessException(Integer errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public Integer getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(Integer errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }

3. 错误枚举,拒绝硬编码

/**
 * 错误枚举
 */
public enum ErrorEnum {
    /** 数据操作错误定义 */
    SUCCESS(200, "成功"),
    
    NO_PERMISSION(403,"你没得权限"),
    
    NO_AUTH(401,"未登录"),
    
    NOT_FOUND(404, "未找到该资源!"),
    
    INTERNAL_SERVER_ERROR(500, "服务器异常请联系管理员");

    /** 错误码 */
    private final Integer errorCode;

    /** 错误信息 */
    private final String errorMsg;

    ErrorEnum(Integer errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public Integer getErrorCode() {
        return errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
}

4. 全局异常处理类

@RestControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 处理自定义异常
     */
    @ExceptionHandler(value = BusinessException.class)
    public AjaxResult bizExceptionHandler(BusinessException e) {
        log.error(e.getMessage(), e);
        return new AjaxResult<>().defineError(e);
    }

    /**
     *处理其他异常
     */
    @ExceptionHandler(value = Exception.class)
    public AjaxResult exceptionHandler( Exception e) {
        log.error(e.getMessage(), e);
        return new AjaxResult<>().otherError(ErrorEnum.INTERNAL_SERVER_ERROR);
    }
}

5. 测试

@RestController
@RequestMapping("test")
public class TestController {

    @GetMapping("query")
    public AjaxResult query(){
        throw new BusinessException(ErrorEnum.NO_PERMISSION.getErrorCode(), ErrorEnum.NO_PERMISSION.getErrorMsg());
    }
}

 

posted @ 2021-02-25 15:33  依然特雷西  阅读(424)  评论(0)    收藏  举报