Java自定义异常解决事务回滚并支持返回http响应数据

我在修改需求时,突然出现了一个问题,我需要优先去存储某条业务数据,否则后面处理会更麻烦,但是存储完要真正做业务时还要走无数的解析,其中有些不符合的可能直接反馈前端,告知这个业务出了哪样的问题,但是这时候就应该把之前存储的某条业务删掉,所以第一步我加了事务,事务加完以后,就考虑怎么反馈异常,如果throw抛出异常,那么返回给前端的信息就不能够抛出,所以搜索信息便有了这篇文章

首先定义下异常类,里面添加要回馈的是什么信息格式

/*
 * @Author df
 * @Description 自定义异常,可支持:在办理业务需要事务又需要给Pad端反馈提示信息或错误信息
 * @Date 14:53 2022/1/14
 * @return
 **/
public class BusinessException extends RuntimeException {
    private Integer code;
    private String msg;

    public BusinessException(Integer code, String message) {
        super(message);
        this.code = code;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
    
}

添加完信息格式后需要考虑,我想要在某些场景下抛出自己定义的异常里能够让事务处理,所以我需要调用BusinessException传输我定义的code码以及msg数据。

SO就需要一个统一处理异常的处理异常类,这个需要在类上面标注@RestControllerAdvice,这个主要是spring提供的用来统一异常处理的。

@ExceptionHandler(value = BusinessException.class)
ExceptionHandler的作用是用来捕获指定的异常。

ResponseEntity<AjaxResult> 这个就可以把自己想要返回的数据格式定义好(AjaxResult),抛出消息后会按照这个(AjaxResult)返回数据格式返回了给前台了。

/*
 * @Author df
 * @Description 自定义异常处理类,可支持针对不同的异常可以写不同的处理方法
 * @Date 14:55 2022/1/14
 * @Param
 * @return
 **/
@RestControllerAdvice
public class RestExceptionHandler {
    /**
     * 业务异常处理,与AjaxResult.error("二线路高层货架缺少对应网点的尾箱!")此反馈方式一致
     *
     * @param e
     * @return AjaxResult
     */
    @ExceptionHandler({BusinessException.class})
    public ResponseEntity<AjaxResult> businessExceptionHandler(HttpServletRequest request, BusinessException e) throws BusinessException {
        return new ResponseEntity(new AjaxResult(e.getCode(), e.getMessage()), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

 使用:

  throw new BusinessException(500, "请检查网点编号和网点名称,以及高层货架信息!");

这个就是既能保证事务能够回退处理并且还能够给前端数据的方式,希望可以帮到你!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值