• 关于java业务层是否抛异常


       在软件开发中,异常处理是一个非常重要的环节。当在业务层实现部分功能时,如果在参数校验和业务处理过程中出现异常,这些异常不能被忽略,因为它们可能会影响系统的稳定性和可靠性。下面是一个示例,这是业务层实现部分功能的代码,在校验参数和业务处理时,都出现了异常,那么这些异常可以不处理吗,因此针对这个问题,对Java 中的异常处理进行了分析和总结。

    代码示例

    1. @Override
    2. public Result add(CheckGroup checkGroup, Integer[] checkitemIds) {
    3. //1、校验参数
    4. if (StringUtil.isEmpty(checkGroup.getCode()) || StringUtil.isEmpty(checkGroup.getName()) ||
    5. StringUtil.isEmpty(checkGroup.getHelpCode()) || StringUtil.isEmpty(checkGroup.getSex())) {
    6. throw new RuntimeException("参数错误");
    7. }
    8. //2、业务处理
    9. CheckGroup checkGroup1 = checkGroupMapper.findName(checkGroup.getName());
    10. CheckGroup code = checkGroupMapper.findCode(checkGroup.getCode());
    11. if (checkGroup1 != null) {
    12. throw new RuntimeException("名称已经存在重复");
    13. }
    14. if (code != null) {
    15. throw new RuntimeException("编码已存在");
    16. }
    17. // 添加检查组(主键回填)
    18. checkGroupMapper.insert(checkGroup);
    19. // 添加中间表
    20. checkGroupCheckitemMapper.insert(checkGroup.getId(), Arrays.asList(checkitemIds));
    21. //3、封装数据
    22. return new Result<>(true, "新增检查组成功", "");
    23. }

    如果没有异常处理,以下情况可能会发生:

     不处理异常可能会发生的情况

    1. 如果参数错误,即checkGroupcodenamehelpCodesex为空,将抛出RuntimeException并终止方法的执行。

    2. 如果检查组名称已经存在重复,即checkGroup1不为空,将抛出RuntimeException并终止方法的执行。

    3. 如果检查组编码已存在,即code不为空,将抛出RuntimeException并终止方法的执行。

    4. 如果以上条件都满足,将执行插入操作,将checkGroup对象插入到数据库中。

    5. 接下来,将执行插入操作,将checkitemIds数组中的元素与checkGroup的ID一起插入到关联表中。

    6. 最后,将返回一个成功的Result对象,其中包含一个空字符串作为消息。

    需要注意的是,如果在插入操作过程中发生了数据库异常或其他错误,将抛出相应的异常,并且方法的执行将被中断。这可能会导致事务回滚,并且数据库中的数据不会被插入。

    因此,为了确保数据的完整性和一致性,建议在适当的地方添加异常处理代码,以便捕获可能发生的异常并进行相应的处理,例如回滚事务、记录日志或返回错误信息给调用方。

    处理异常的方法

    1.try-catch

    在Java中,异常处理是通过使用try-catch语句块来完成的。当程序运行过程中出现异常时,程序会跳转到相应的catch块中执行异常处理代码,而不是直接中断程序。这样,我们就可以通过异常处理机制来捕获和处理程序中的错误,以保障程序的正常运行。

    2.全局异常处理器

    全局异常处理器是作用于整个程序的异常处理方式,它可以捕获到未被显式捕获的异常,因此全局异常处理器可以捕获try-catch无法捕获的异常。此外,全局异常处理器还可以在异常发生后进行一些额外的处理操作,比如记录日志、清理资源等。

    而try-catch是一种块异常处理方式,它只能捕获try块中抛出的异常,并执行相应的catch块中的异常处理代码。如果try块中的代码抛出了异常,程序会立即跳转到与该异常类型匹配的catch块中执行异常处理代码。如果try块中的代码没有抛出异常,那么catch块中的代码就不会被执行。

    总的来说,全局异常处理器和try-catch都是异常处理的方式,但是它们的适用范围和功能有所不同。全局异常处理器适用于整个程序的异常处理,可以捕获未被显式捕获的异常,并进行额外的处理操作。而try-catch适用于特定的代码块,只能捕获该代码块中抛出的异常,并执行相应的异常处理代码。

    代码示例:

    1. @RestControllerAdvice
    2. //Spring Boot 中提供的一个注解,它用于在 Spring MVC 应用程序中全局捕获异常。
    3. public class GlobalExceptionHandler {
    4. @ExceptionHandler(value = RuntimeException.class)
    5. //@ExceptionHandler(value = YourException.class)
    6. public Result exhandler(RuntimeException rex) {
    7. return new Result<>(true, "", "");
    8. }
    9. }

    总结

    在业务层中,处理异常是一种良好的编程实践。以下是一些关于业务层异常处理的重要事项:

    1. 异常处理的目的是提高系统的可靠性和稳定性。通过捕获和处理异常,可以避免系统崩溃或产生不可预料的错误。

    2. 在业务层中,应该根据具体的业务需求和逻辑来决定是否处理异常。有些异常可能需要立即处理,有些异常可能需要记录日志并继续执行,有些异常可能需要向用户显示错误信息。

    3. 异常处理应该遵循适当的错误处理机制,例如使用try-catch语句来捕获异常,并在catch块中进行适当的处理,或者定义一个全局异常处理器都是不错的办法。

    4. 异常处理应该提供有意义的错误信息,以便于调试和排查问题。可以通过自定义异常类或使用异常的getMessage()方法来获取详细的错误信息。

    5. 异常处理应该遵循异常处理的最佳实践,例如避免捕获所有异常、避免空catch块、避免捕获Throwable等。

  • 相关阅读:
    安全保护策略:iOS应用程序代码保护的关键步骤和技巧
    走进常熟东南相互电子,看AI如何深入产业让工厂更智能
    MATLAB实现的数字图像处理(指纹增强)
    一套极简的MQTT使用接口EasyMqttClient
    MySQL索引
    为何电脑要设置网络掩码?
    Vue学习之--------VueX(2022/8/31)
    Avalonia常用小控件Menu
    Stored Procedure && Trigger
    部署LVS-NAT群集实验
  • 原文地址:https://blog.csdn.net/Tripmonster/article/details/132644109