1、通过 e instanceof BusinessException 来进行区别抛出提示
try 里面的通过判断,进行自定义 throw,具体的就没写,如果想要再添加异常,则必须在 try 里面 throw,catch 才能够捕获。
// try 里面抛了两个自定义异常
// catch 里面进行捕获,根据类型返回不同的提示消息
// 这里的 BusinessException 异常是添加失败
// 这里的 Exception 异常是数据库异常或者表不存在又或者表被改名了......
try {
throw new BusinessException("添加失败!");
// throw new Exception("数据库异常!");
} catch (Exception e) {
if (e instanceof BusinessException) {
throw new Exception(e.getMessage());
} else if (e instanceof Exception) {
throw new BusinessException(msg);
}
}
// 我的 catch 里面 throw 不一样是因为 BusinessException 里面有自定义拼接的通用字符串。
// 这里面可以一样:catch 里面的 throw
注释的那个异常是写不写都一样(前提是出现这个异常),都能捕获得到,就是都能够进 catch
try 里面的通过判断,进行自定义 throw,上面我就没写。
2、通过 try {} catch () {} catch () {} 来进行区别抛出提示(建议此种方法)
catch里面写异常,大括号里面进行处理,切记,最里面的catch异常是最小的,先执行第一个catch,如果没有才会执行第二个catch,从第一个到后面的等级越来越大。
try {
throw new BusinessException("添加失败!");
// throw new Exception("数据库异常!");
} catch (BusinessException e) {
String msg = "添加失败";
throw new BusinessException(msg); // throw new Exception(msg)
} catch (Exception e) {
String msg = "数据库异常!";
throw new Exception(msg); // throw new BusinessException(msg)
}
// throw 自定义异常根据公司业务需求自定义选择,这里仅仅列举了两个
需要注意的是,无论哪一种方式,当程序处理运行异常时候,只能进入特定的一个,如果你想要进入自定义异常,在 try 里面必须抛出来,才会捕获到自定义的异常!!!!其实,换句话说,这篇文章就是讲这个多情况异常的,肯定是需要自定义的,所以 try 里面肯定会抛异常的,只不过根据自己的业务去定具体需要抛几个的问题而已。
假定情况:这是个添加的方法,而且你需要分 3 种情况,进行区分提示,那么 try 里面只需要抛 2 个自定义的异常即可,catch 里面会有 3 个,多出来的那一个是程序运行时捕获的那个。(一般来说是这样的)
小贴士:
获取异常类型:e.getClass()
获取异常信息:e.getMessage()
放在输出语句里面即可
总结:
在 service 里面实现的方法里面进行业务处理,进行 try catch,要注意的是,一般来说都会用一个 try 把代码全部包起来,如果有多个业务处理,需要进行区分,就多写 catch,叫做 try 不够,用 catch 来补。(两种方式,上面有介绍)
提示消息:是把 msg 以参数的形式,抛给上一层,即放在自定义的异常里面,action 获取到的就是 msg,这一步做到了把代码的异常错误消息,转为自定义提示消息。