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
    评论
必须制定一系列的规范,以确保网络设计的质量和效果。网络设计规范包括要在Java中回滚数据,你需要使用Java中的事务(Transaction)概念。当一个事务失败,所有以下方面: 1. 网络架构设计规范 网络架构设计是网络设计的核心,必须根据的操作都应该回滚,以确保数据的一致性。在Java中,你可以使用JDBC或者J网络规划设计报告,制定出适合用户的网络架构设计方案。网络架构设计规范包括PA等ORM框架来实现事务。 在JDBC中,你可以使用以下代码来实现事务和回滚: (1)分层设计原则:网络架构设计必须遵循分层设计原则,将网络划分为: ``` try { // 开始事务 connection.setAutoCommit(false); // 执行SQL语句 // ... 不同的层次,每个层次有不同的功能。 (2)模块化设计原则:网络架构 // 提交事务 connection.commit(); } catch (SQLException e) { // 回滚事务 connection.rollback(); 设计必须遵循模块化设计原则,将网络划分为不同的模块,每个模块有不 throw e; } ``` 在JPA中,你可以使用以下代码来实现事务和回滚: ``` try { 同的功能。 2. 网络设备配置规范 网络设备配置是网络设计的重要环节,必须 entityManager.getTransaction().begin(); // 执行JPA操作 // ... entityManager.getTransaction().commit(); } catch (Exception e)根据网络架构设计方案,选择适合的网络设备,并进行配置。网络设备配置规范包括: { entityManager.getTransaction().rollback(); throw e; } ``` 注意,无论是JDBC还是JPA,都需要在catch块中调用回滚操作,以确保在发生异常时回滚事务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值