方式一:

        CatalogPO deleteTarget = null;
/** 查询是否存在 **/
deleteTarget = catalogMapper.findByCatalogId(catalogId);
if (Objects.isNull(deleteTarget)) {
log.warn("the delete catalog is not existed");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "要删除的服务目录不存在");
}
/** 判断是不是是预置服务目录 **/
if (deleteTarget.getPreseted() == 1) {
log.warn("the preseted catalog is not allow delete");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "预置服务目录不允许删除");
}
/** 判断服务目录是否有绑定的服务 **/
Metadata metadata = new Metadata();
metadata.setFilter(new TreeMap<>());
metadata.getFilter().put("catalogId", catalogId.toString());
metadata.setPaginationParam(new PaginationParam(1,1000,1000));
List<WhBuService> services = catalogMapper.listBindedServices(metadata);
if (CollectionUtils.isNotEmpty(services)) {
log.warn("the catalog has bind service is not allow delete");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "服务目录绑定有服务不允许删除");
}
try {
List<Long> ids = findCatalogIdAndChildIds(catalogId);
catalogMapper.deleteCatalogByIds(ids);
return mapper.map(deleteTarget,CatalogDO.class);
} catch (Exception e) {
log.error("delete catalog error,{}", e);
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "删除服务目录方法失败");
}

红色地方抛出异常,则紫色的地方不会继续执行

方式二:

        CatalogPO deleteTarget = null;
try {
/** 查询是否存在 **/
deleteTarget = catalogMapper.findByCatalogId(catalogId);
if (Objects.isNull(deleteTarget)) {
log.warn("the delete catalog is not existed");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "要删除的服务目录不存在");
}
/** 判断是不是是预置服务目录 **/
if (deleteTarget.getPreseted() == 1) {
log.warn("the preseted catalog is not allow delete");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "预置服务目录不允许删除");
}
/** 判断服务目录是否有绑定的服务 **/
Metadata metadata = new Metadata();
metadata.setFilter(new TreeMap<>());
metadata.getFilter().put("catalogId", catalogId.toString());
metadata.setPaginationParam(new PaginationParam(1,1000,1000));
List<WhBuService> services = catalogMapper.listBindedServices(metadata);
if (CollectionUtils.isNotEmpty(services)) {
log.warn("the catalog has bind service is not allow delete");
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "服务目录绑定有服务不允许删除");
}
} catch (Exception e) {
log.error("delete catalog error,{}", e);
}
try {
List<Long> ids = findCatalogIdAndChildIds(catalogId);
catalogMapper.deleteCatalogByIds(ids);
return mapper.map(deleteTarget,CatalogDO.class);
} catch (Exception e) {
log.error("delete catalog error,{}", e);
throw new WhBuCatalogException(HttpStatus.INTERNAL_SERVER_ERROR, ErrorCode.SUFIX_DB_DELETE, "删除服务目录方法失败");
}

红色地方抛出异常,则紫色的地方还会继续执行

try-catch+thows异常范围说明的更多相关文章

  1. 异常处理的捕捉:try{}catch(异常类 变量)finally{最终执行}

    可以对异常进行针对性处理的方式.try{ //需要被检查的异常 }catch(异常类  变量)//该变量用于接收发生的异常{ //处理异常的代码 }finally{ //一定会被执行的代码. }

  2. “全栈2019”Java异常第十二章:catch与异常匹配

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  3. C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全

    前言: C++的异常处理机制是用于将运行时错误检测和错误处理功能分离的一 种机制(符合高内聚低耦合的软件工程设计要求),  这里主要总结一下C++异常处理的基础知识, 包括基本的如何引发异常(使用th ...

  4. 为什么catch了异常,但事务还是回滚了?

    前几天我发了这篇文章<我来出个题:这个事务会不会回滚?>得到了很多不错的反馈,也有不少读者通过微信.群或者邮件的方式,给了我一些关于test4的回复.其中还有直接发给我测试案例,来证明我的 ...

  5. 在 SQL Server 中使用 Try Catch 处理异常

    如何在 SQL Server 中使用 Try Catch 处理错误? 从 SQL Server 2005 开始,我们在TRY 和 CATCH块的帮助下提供了结构错误处理机制.使用TRY-CATCH的语 ...

  6. C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框

    诚意满满直接上代码: static void Main(string[] args) { //Main函数中增加此句 AppDomain.CurrentDomain.UnhandledExceptio ...

  7. SQL Server 中使用 Try Catch 处理异常

    CREATE TABLE ErrorLog( errNum INT, ErrSev ), ErrState INT, ErrProc ), ErrLine INT, ErrMsg ) ) CREATE ...

  8. 前端魔法堂——异常不仅仅是try/catch

    前言  编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外.对于业务用例的例外我们别无它法,必须要求实施人员与 ...

  9. (后端)异常不仅仅是try/catch

    前言  编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外.对于业务用例的例外我们别无它法,必须要求实施人员与 ...

随机推荐

  1. 浅谈Http、TCP、UDP和 IP 的的区别

    应用层:Http,超文本传输协议(HyperText Transfer Protocal):利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议.客户端使用Web浏览器发起HTTP请求 ...

  2. HibernateTemplate使用注意点

    1.  findByExample(vo) 可轻松根据vo的内部数据作为参数查找数据,vo中的基本类型不能为null,同时不支持主键查找. 2. get(vo.class, id) 根据主键来查找数据 ...

  3. LINQ to SQL语句(1)Select查询的九种形式

    目录 说明 简单形式 匿名类型形式 条件形式 指定类型形式 筛选形式 Shaped形式 嵌套形式 本地调用方法形式 Distinct形式 说明 与SQL命令中的select作用相似但位置不同,查询表达 ...

  4. vue基础——vue实例

    创建一个vue实例 每个vue应用都是通过Vue函数创建一个新的Vue实例开始的 var vm = new Vue({ //选项 }) 一个Vue应用由一个通过new Vue创建的根Vue实例,以及可 ...

  5. python: no module named bz2

    https://stackoverflow.com/questions/8115280/importerror-no-module-named-bz2-for-python-2-7-2 centos6 ...

  6. oracle启动过程

    Oracle  的启动需要经历四个状态,SHUTDOWN .NOMOUNT .MOUNT .OPEN. SHUTDOWN状态                                       ...

  7. java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z

    解决:问谷老师得知是microsoft提供的数据库驱动存在bug.需要换一种驱动连接,使用jtds(下载地址:http://sourceforge.net/projects/jtds/files/)下 ...

  8. adb的一些常用的命令

    如果在dos界面想要直接用adb的话,需要将anroidsdk安装目录下的tools和platform-tools以及加入到环境变量path中. 查看当前的设备(包括真机和模拟器):adb devic ...

  9. 通过Roslyn构建自己的C#脚本(更新版)(转)

      http://www.cnblogs.com/TianFang/p/6939723.html   之前写过文章介绍过如何通过Roslyn构建自己的C#脚本,但那篇文章是参考自Roslyn CTP版 ...

  10. mysql转型

    1.将Int 转为varchar经常用 concat函数,比如concat(8,’0′) 得到字符串 ’80′2.将varchar 转为Int 用 cast(a as signed) a为varcha ...