Spring Boot中自定义异常类(基于统一封装类)

!!!作者项目包的结构图!!!

 

 Common的包下

Constants.interface(统一的常量定义地方,例如状态码)

package com.example.common;
/**
 * 统一常量定义
 * **/
public interface Constants {
     String CODE_200 = "200";//成功
     String CODE_401 = "401";  // 权限不足
     String CODE_400 = "400";  // 参数错误
     String CODE_500 = "500"; // 系统错误
     String CODE_600 = "600"; // 其他业务异常
}

 Result.java(统一返回前端封装类)

package com.example.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一返回前端封装类
 * **/
@Data
@AllArgsConstructor//全参数的构造器参数
@NoArgsConstructor//没有参数的构造器的参数注解
public class Result {
    private String code;
    private String msg;
    private Object data;

    public static Result success() {
        return new Result(Constants.CODE_200, "", null);
    }

    public static Result success(Object data) {
        return new Result(Constants.CODE_200, "", data);
    }

    public static Result error(String code, String msg) {
        return new Result(code, msg, null);
    }

    public static Result error() {
        return new Result(Constants.CODE_500, "系统错误", null);
    }
}

 Exception包

ServiceException.java(自定义的异常)

package com.example.Exception;
import lombok.Getter;

/**
 * @author: Carden
 * @Date
 * @Description:自定义异常
 * **/
@Getter
public class ServiceException extends RuntimeException {
    private String code;
    //不要定义msg,因为RuntimeException有msg存在
    public ServiceException(String code, String msg) {
        super(msg);
        this.code = code;
    }

}

 GlobalExceptionHandler.java(自定义的异常捕获的处理)

package com.example.Exception;

import com.example.common.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author: Carden
 * @Date
 * @Description:自定义异常处理
 * **/
/**
* 初定义拦截规则:

ControllerAdvice 提供了多种指定Advice规则的定义方式,默认什么都不写,则是Advice所有Controller,当然你也可以通过下列的方式指定规则
比如对于 String[] value() default {} ,
 写成@ControllerAdvice("org.my.pkg") 或者 @ControllerAdvice(basePackages="org.my.pkg"),
 则匹配org.my.pkg包及其子包下的所有Controller,当然也可以用数组的形式指定,
 如:@ControllerAdvice(basePackages={"org.my.pkg", "org.my.other.pkg"}),
 也可以通过指定注解来匹配,比如我自定了一个 @CustomAnnotation 注解,我想匹配所有被这个注解修饰的 Controller,
 可以这么写:@ControllerAdvice(annotations={CustomAnnotation.class})

 @ControllerAdvice 配合 @ExceptionHandler 实现全局异常处理
 @ControllerAdvice 配合 @ModelAttribute 预设全局数据
 @ControllerAdvice 配合 @InitBinder 实现对请求参数的预处理
* */
@ControllerAdvice
public class GlobalExceptionHandler extends RuntimeException{
    /**
     * 如果抛出的的是ServiceException,则调用该方法
     * @param se 业务异常
     * @return Result
     */
    @ExceptionHandler(ServiceException.class)//捕获自定义异常时的处理
    @ResponseBody
    public Result handle(ServiceException se){
        return Result.error(se.getCode(), se.getMessage());
    }


}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值