设计接口时应该如何设计业务异常?
本文为原创,转载请注明
作者:cha1R(tanjiayqq)
Java里异常分两种,一种是检查(checked)的,一种是非检查(unchecked)的。
非检查以RuntimeException作为典型代表,它有一个特点就是我们可以不用捕捉它,如果没有捕捉它,它会一直往上抛直到main()方法处理,从而退出整个程序。注意如果是多线程的话,它并不会在main()方法终止程序,它会一直往上抛直到run()方法,而run()方法没有捕捉它的话会终止线程。
作为业务异常,是要反馈给用户的,所以我们不希望发生任何终止线程或者终止程序的代码。所以定义业务异常,我们一般使用检查的(checked)异常,定义一个异常非常简单,只需要写一个简单的类继承Exception即可。
/** * 评论 * @param userId 被评论的用户的ID * @param weiboId 被评论的微博的ID * @param content 评论内容 * @return */ boolean comment(String userId,String weiboId,String content);
定义这个方法的异常还算比较简单,从参数入手
userId:用户不存在异常
weiboId:微博不存在异常
content:内容包含敏感词汇异常,内容超出字数限制异常。 或直接用一个 内容不合法异常
这些都是可以抛出的异常。
但是有时候一条微博可能被设置为 “不可评论”,那么我们是不是要再跑出一个“不可评论异常”?这个完全不必抛出,因为我们抛出业务异常是用来反馈给用户看,从而让用户做出相应处理,但是这种不可改变的情况完全没必要交给用户决定如何处理,只需要在方法内部抛出RuntimeException,UI层统一捕获,提示一下即可。
最后介绍一个学习网站,比较适合初学者,视频略多:http://gz.itcast.cn/