SpringBoot 异常统一处理 + 自定义异常处理

博客围绕Java和Spring Boot展开,介绍了通过@ControllerAdvice和@ExceptionHandler处理controller层异常的方法,还涉及定义自定义异常类、统一返回类型、统一返回枚举类以及自定义异常的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、通过@ControllerAdvice和@ExceptionHandler实现处理controller层的异常

package com.prison.common.config;

import com.prison.common.entity.MyException;
import com.prison.common.entity.Result;
import com.prison.common.enums.ResultType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author WangJing
 * @Description 异常处理
 * @date 2021/6/18 23:48
 */
@Slf4j
@ControllerAdvice
public class MyControllerAdvice {

    /**
     * 全局异常捕捉处理
     * @param ex
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Result<?> errorHandler(Exception ex) {
        log.error("errorHandler:{}", ex.toString());
        return new Result(ResultType.FAIL, ex.getMessage());
    }

    /**
     * 拦截捕捉自定义异常 MyException.class
     * @param ex
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = MyException.class)
    public Result<?> myErrorHandler(MyException ex) {
        log.error("myErrorHandler:{}", ex.toString());
        return new Result(ex);
    }

}

二、定义自定义异常类

package com.prison.common.entity;

import com.prison.common.enums.ResultType;
import lombok.Data;

/**
 * @author WangJing
 * @Description 自定义异常
 * @date 2021/6/18 0018 23:50
 */
@Data
public class MyException extends RuntimeException {

    private Integer code;

    private String msg;

    public MyException(ResultType resultType) {
        code = resultType.getCode();
        msg = resultType.getMsg();
    }

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

}

三、统一返回类型

package com.prison.common.entity;

import com.prison.common.enums.ResultType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @ClassName Result
 * @Description 统一返回类
 * @Author WangJing
 * @Date 2021/6/2 21:54 下午
 * @Version V1.0
 */
@Data
@ApiModel("接口返回对象")
public class Result<T>  {

        @ApiModelProperty("接口响应编码")
        private Integer code;

        @ApiModelProperty("接口响应信息")
        private String msg;

        @ApiModelProperty("接口响应数据")
        private T data;

        public Result(ResultType resultType, T data) {
            code = resultType.getCode();
            msg = resultType.getMsg();
            this.data = data;
        }

        public Result() {
            code = ResultType.SUCCESS.getCode();
            msg = ResultType.SUCCESS.getMsg();
        }

        public Result(ResultType resultType) {
            code = resultType.getCode();
            msg = resultType.getMsg();
        }

        public Result(MyException ex) {
            code = ex.getCode();
            msg = ex.getMsg();
        }

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

}

四、统一返回枚举类

package com.prison.common.enums;

/**
 * @ClassName ResultType
 * @Description 返回枚举类
 * @Author WangJing
 * @Date 2021/6/2 22:00 下午
 * @Version V1.0
 */
public enum ResultType {

    SUCCESS(200,"请求处理成功!"),

    FAIL(9001,"请求处理失败!");

    private Integer code;
    private String msg;

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

    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;
    }
}

五、自定义异常使用:

            throw new MyException(ResultType.FAIL);

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA·D·WangJing

您的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值