首页 > 代码库 > REST(Jersey实现)统一异常机制

REST(Jersey实现)统一异常机制

一:异常分类

 (1)Throwable类是所有异常的始祖,它有两个直接子类Error / Exception: 
 Error仅在Java虚拟机中发生动态连接失败或其它的定位失败的时候抛出一个Error对象。一般程序不用捕捉或  抛出Error对象。 


(2)Unchecked Exception: 
a. 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。 
b. 包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。 
c. 语法上不需要声明抛出异常。 


(3)Checked Exception: 
a. 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等) 
b. 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。 
c. 需要try catch处理或throws声明抛出异常。 


二:异常处理原则

1、在框架层面封装checked exception,将其转化为unchecked exception,避免开发过程中编写繁冗的try...catch代码。 

2、业务层面的开发,根据程序代码职责定义不同的RuntimeException(它就是unchecked exception,一般定义为RuntimeException的子类) 

3、通过前两个观点,系统中自定义的异常将只存在unchecked exception,系统只在于客户端交换数据的上层,设置统一异常处理机制,并将一些异常转化为用户所能理解的信息传达给用户。 

4、其他如业务层,数据持久层,等底层只负责将异常抛出即可,但要注意不要丢失掉异常堆栈(这一点是初学者容易犯的一个错误)。


三: jersey异常处理机制举例


(1)在api所在包下,创建ExceptionMapperSupport统一异常处理器


技术分享


(2)自定义异常

异常父类;持久层异常;业务层异常

技术分享技术分享技术分享


(3)Dao层异常统一抛出PersistenceException

技术分享


(4)业务逻辑层Action抛出WebActionExceptionType


技术分享


(5):自定义异常友好提示


技术分享


(6):api调用,异常解析

技术分享


(7):异常提示效果


技术分享

REST(Jersey实现)统一异常机制