SpringBoot项目中自定义异常

自定义异常

因为某些业务需要进行业务回滚。但spring的事务只针对RuntimeException的进行回滚操作。所以需要回滚就要继承RuntimeException。

public class MyException extends RuntimeException {
	//异常错误码
    private int code;
    //异常信息
    private String msg;
	//异常构造方法 在使用时方便传入错误码和信息
	public MyException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

捕获异常

使用@ControllerAdvice注解,配合@ExceptionHandler使用
例如:@ExceptionHandler(Exception.class) 用来捕获@requestMapping的方法中所有抛出的exception。

@ControllerAdvice
public class DefultExceptionHandler {

	//声明要捕获的异常
	@ExceptionHandler(Exception.class)
	public String ExcepitonHandler(HttpServletRequest request,Exception e) {
	    return “error”;
	}
}

捕获异常后的具体操作,写上合适的逻辑

例如:

1.创建了一个SellException类放入Exception包中

public class SellException extends RuntimeException {
    private Integer code;
    public SellException(ResultEnum resultEnum) {
        super(resultEnum.getMessage());
        this.code = resultEnum.getCode();
    }
}

2.因为异常有很多类型,所以我们建立一个枚举类ResultEnum

在这个枚举类中放入所有的能使用的异常然后进行调用,枚举类可以访问数据但是不能修改,所以我们使用@Getter标签

@Getter
public enum ResultEnum {

    PARAM_ERROR(1,"参数不正确"),

    PRODUCT_NOT_EXIST(10,"商品不存在"),

    PRODUCT_STOCK_ERROR(11,"商品库存不正确"),

    ORDER_NOT_EXIST(12,"订单不存在"),
     ;
    
    private Integer code;
    private String message;

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

3. 捕获异常

先抛出

throw new SellException();

捕获

@ControllerAdvice
public class SellException {
    /**
    * 拦截登录异常,并跳转到登录界面
    * value = SellException .class)表示拦截的异常为SellException 异常
    */       
    @ExceptionHandler(value = SellException.class)
    public ModelAndView handlerAuthorize(){
       return new ModelAndView("redirect:"+"/sell/seller/toLogin");
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值