SpringBoot 统一异常处理\统一响应报文\自定义异常

简介: SpringBoot 统一异常处理\统一响应报文\自定义异常

SpringBoot 统一异常处理

使用注解 @ControllerAdvice

自定义异常

package com.manlitech.cloudboot.basebootconfig.exception;

import com.manlitech.cloudboot.common.enums.ResultEnums;

public class MyException extends RuntimeException{
private Integer code;

    public MyException(ResultEnums resultEnum) {
        super(resultEnum.getMsg());
        this.code = resultEnum.getCode();
    }

    public MyException(Integer code,String msg) {
        super(msg);
        this.code = code;
    }

    public Integer getCode() {
        return code;
    }

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

}

异常捕获做处理

package com.manlitech.cloudboot.basebootconfig.exception;

@ControllerAdvice
@Component
public class ExceptionHandle {

    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
    
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result handle(Exception e) {
        //logger.error("exceptionmsg="+e.getMessage());
        if (e instanceof MyException) {
            MyException myException = (MyException) e;
            return ResultUtil.error(myException.getCode(), myException.getMessage());
        }else {
            //logger.error("【系统异常】"+e.getStackTrace());
            e.printStackTrace();
            String message = getExceptionToString(e);
            // 可能由于运行是sentinel发出的runtimeException
            Result sentinelResult = ExceptionHandle.isSentinelRuntimeException(message);
            if(sentinelResult != null){
                return sentinelResult;
            }
            return ResultUtil.error(ResultEnums.UNKONW_ERROR.getCode(),ResultEnums.UNKONW_ERROR.getMsg(),message);
        }
    }


}

ResultUtil 响应公用的方法

package com.manlitech.cloudboot.common.utils;


import org.joda.time.DateTime;

import java.util.List;

public class ResultUtil {

    public static Result success(Object object) {
        Result result = new Result();
        result.setCode(0);
        result.setMsg("成功");
        result.setData(object);
        result.setSystemTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        return result;
    }

    public static Result success(Integer code , String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        result.setSystemTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        return result;
    }

    public static Result success(List list,Long total) {
        Result result = new Result();
        result.setCode(0);
        result.setMsg("成功");
        result.setData(list);
        result.setRows(total);
        result.setSystemTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        return result;
    }

    public static Result success() {
        return success(null);
    }

    public static Result error(Integer code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        result.setSystemTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        return result;
    }
    
    public static Result error(Integer code, String msg ,Object object) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(object);
        result.setSystemTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        return result;
    }
}

统一的响应格式

package com.manlitech.cloudboot.common.utils;

public class Result<T> {

    /** 错误码. */
    private Integer code;

    /** 提示信息. */
    private String msg;

    /** 具体的内容. */
    private T data;

    /** 错误码. */
    private Long rows;
    
    /** 当前系统时间 */
    private String systemTime;

    public Long getRows() {
        return rows;
    }

    public void setRows(Long rows) {
        this.rows = rows;
    }

    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 T getData() {
        return data;
    }

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

    public String getSystemTime() {
        return systemTime;
    }

    public void setSystemTime(String systemTime) {
        this.systemTime = systemTime;
    }


}

统一的字典码

package com.manlitech.cloudboot.common.enums;

public enum ResultEnums {

    /*成功返回*/
    SUCCESS(0, "成功"),
    SUCCESS_LOGOUT(1, "退出成功,期待下次使用本系统"),
    /*特殊异常*/
    UNKONW_ERROR(-1, "呀,服务器开小差了~"),
    //登录相关
    NO_LOGIN(-2,"用户信息不存在。可能未登录"), 
    NO_LOGIN_ERR_LOGIN_Info(-3,"用户名密码错误或信息不存在,请核对"),
    NO_LOGIN_REFRESH_TOKEN_IS_EXPIRE(-4,"refresh_token已经失效"),
    ERROR_TOKEN(-5,"token验证失败"),
    ERROR_PERMISSION(-6,"无访问权限"),
    /* 异常相关 */
    UNKONW_REDIS_TYPE(-7,"redis类型[单机,集群]未知"),
    SQL_INJECTION(-8,"警告:sql存在注入风险"),
    NO_FOUND_QUEUE_NAME_JOB (-9,"未找到相对应的队列名称"),
    ERROR_GATEWAY (-10,"网关异常提示"),
    API_FLOW_EXCEPTION (-11,"服务繁忙,请重试,服务限流") ,
    API_DEGRADE_EXCEPTION(-12,"服务繁忙,请重试,服务降级"),
    API_PARAM_HOT_FLOW_EXCEPTION(-13,"服务繁忙,请重试,热点参数限流"),
    API_SYSTEM_BLOCK_EXCEPTION(-14,"服务繁忙,请重试,系统规则(负载/...不满足要求)"),
    API_AUTHORITY_EXCEPTION(-15,"授权规则不通过");
    private Integer code;

    private String msg;

    ResultEnums(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

微信公众号,需要的话就关注下我~

目录
相关文章
|
3月前
|
JSON 缓存 Java
Springboot 之 Filter 实现超大响应 JSON 数据压缩
Springboot 之 Filter 实现超大响应 JSON 数据压缩
33 0
|
1月前
|
JSON Java API
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
Springboot项目中如何设计一个规范的统一的Restful API 响应框架?
22 1
|
3月前
|
JSON 前端开发 Java
深入解析SpringBoot的请求响应机制
深入解析SpringBoot的请求响应机制
|
3月前
|
XML JSON Java
SpringBoot之响应处理
SpringBoot之响应处理
|
4月前
|
Java
SpringBoot全局异常不生效分析与解决
SpringBoot全局异常不生效分析与解决
|
4月前
|
Java 数据格式 Spring
SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)
SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)
|
9月前
|
存储 运维 Java
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder) 1
SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)
|
4月前
|
JSON Java 数据格式
SpringBoot 统一响应返回格式格式 数组
SpringBoot 统一响应返回格式格式 数组
|
5月前
|
JSON Java 数据格式
springboot全局异常处理器
springboot全局异常处理器
37 0
|
8月前
|
XML 网络架构 数据格式
SpringBoot-22-RESTful统一规范响应数据格式
REST是Representational State Transfer的缩写,是在2000年被Roy Thomas Fielding提出的,Fielding是一个很厉害的人物,他是HTTP协议的主要设计者。REST是他对互联网软件构架的原则。REST是一种针对网络应用设计和软件开发方式,降低了开发的复杂性,提高了系统的可伸缩性。如果想要具体了解一下其含义可以查看一下阮一峰老师对REST理解RESTful架构。
72 0