Java教程

Java之全局异常处理类

本文主要是介绍Java之全局异常处理类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

如何将后端的错误通过接口返回给前端使用。

一、需要后端进行全局异常的捕获

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {


    /**
     * 业务异常处理
     *
     * @param e
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = ScmplatformException.class)
    public Result handleServiceException(ScmplatformException e){
        log.error("出现异常", e);
        Result result = new Result();
        result.setMsg(e.getMessage());
        result.setCode(e.getCode());
        return result;
    }

    /**
     * 运行时异常
     * @param e
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = RuntimeException.class)
    public Result handleArgsException(RuntimeException e){
        Result result = new Result();
        result.setMsg(e.getMessage());
        result.setData(e.getStackTrace());
        result.setCode(500);
        return result;
    }
}

由上述代码可知,我们定义了全部捕获的异常,RuntimeException、ScmplatformException

二、定义全局的异常枚举code 和 message

public enum SystemInfo {

    //系统类别错误  00100
    SYS_SUCCESS(200, ""),
    SYS_INTERNAL_ERROR(120000100, "系统错误,请稍后重试"),
    SYS_PARAM_ERROR(120000101, "参数错误"),
    SYS_DATA_ERROR(120000102, "数据错误"),
    SYS_USER_NOT_EXISTS(120000103,"用户不存在"),
    SYS_INVALID_REQUEST(120000104,"非法请求"),
    SYS_BUSY(120000105, "当前系统繁忙,请稍后重试"),
    SYS_PATH_NOT_NULL(120000106,"path路径不能为空"),
    SYS_METHOD_NOT_EXISTS(120000107,"接口未找到该方法"),
    SYS_INTERFACE_NAME_NOT_NULL(120000108,"接口全限定类名不能为空"),
    SYS_DIFF_INACCESSIBLE(120000109,"由于无法访问基础值而无法进行比较"),
    SYS_MAVEN_SETTING(120000110,"maven参数解析错误,请检查maven参数"),
    SYS_JAR_NOT_EXITS(120000111,"当前路径下jar包不存在,请先下载上传maven坐标下载"),
    SYS_METHOD_NAME_NOT_NULL(120000112,"方法名称不能为空"),
    SYS_ENV_NOT_NULL(120000113,"环境不能不能为空"),
    SYS_PARAMETER_TYPE_NOT_NULL(120000114,"入参类型不能为空"),
    SYS_PARAMETERS_NOT_NULL(120000115,"入参不能为空")
    ;

    private Integer code;
    private String message;



    SystemInfo(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return code;
    }

    public String message() {
        return message;
    }

    public String message(String msg) {
        return msg + message();
    }

    public String messageVal(Object ... args){
        return String.format(message,args);
    }
}

三、接口异常抛出去

例如:
if (newReflectBoList.size() <=0){
            throw new ScmplatformException(SystemInfo.SYS_METHOD_NOT_EXISTS);
        }
try {
            list =dubboDataMapper.selectAll();
        }catch (RuntimeException e){
            e.getStackTrace();
            throw new RuntimeException(e.getCause());
        }

此时即可进行异常数据透出即可。

这篇关于Java之全局异常处理类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!