SpringBoot搭建的SpringMVC进行全局异常捕获

本篇基于@RestControllerAdvice@ExceptionHandler来捕获全局的异常并进行统一的响应

创建自己的自定义业务异常类

public class ServiceException extends Exception{
    private String message;

    public ServiceException(String message) {
        super(message);
        this.message = message;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

创建一个通用的响应类

@Data
public class RespDto<T> {
    private Integer code;
    private String message;
    private T data;



    public static <T> RespDto<T> success(T data) {
        RespDto<T> response = new RespDto<>();
        response.setCode(ResponseEnum.SUCCESS.code);
        response.setMessage(ResponseEnum.SUCCESS.msg);
        response.setData(data);
        return response;
    }

    public static <T> RespDto<T> success() {
        RespDto<T> response = new RespDto<>();
        response.setCode(ResponseEnum.SUCCESS.code);
        response.setMessage(ResponseEnum.SUCCESS.msg);
        return response;
    }

    public static <T> RespDto<T> fail() {
        RespDto<T> response = new RespDto<>();
        response.setCode(ResponseEnum.FAILED.code);
        response.setMessage(ResponseEnum.FAILED.msg);
        return response;
    }

    public static <T> RespDto<T> fail(String msg) {
        RespDto<T> response = new RespDto<>();
        response.setCode(ResponseEnum.FAILED.code);
        response.setMessage(msg);
        return response;
    }

    public static <T> RespDto<T> fail(ResponseEnum responseEnum) {
        return new RespDto<>(responseEnum.code, responseEnum.msg);
    }

    public RespDto() {
    }

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

    private RespDto(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public RespDto(ResponseEnum responseEnum) {
        this.code = responseEnum.code;
        this.message = responseEnum.msg;
    }
}

响应枚举类

public enum ResponseEnum {
    SUCCESS(200, "请求成功"),
    FAILED(500, "服务异常"),
    ;
    public final int code;
    public final String msg;

    ResponseEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

本章核心-全局异常捕获

@RestControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = {Exception.class})
    public RespDto globalExceptionMapping(Exception exception) {
        exception.printStackTrace();
        return RespDto.fail("服务器错误");
    }
	
    @ExceptionHandler(value = {ServiceException.class})
    public RespDto serviceExceptionMapping(Exception exception) {
        exception.printStackTrace();
        return RespDto.fail(exception.getMessage());
    }
    /**
    这里可以定义自己想要捕获的异常,在这里进行处理
    @ExceptionHandler(value = {xxxException.class})
    public RespDto xxxxExceptionMapping(xxxxException exception) {
        exception.printStackTrace();
        return RespDto.fail(exception.getMessage());
    }
    **/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值