在Java中如何使用好Exception
是门艺术。
一般我们常见的有checked异常(Exception
)和unchecked异常(RuntimeException
),区别在于前者在语法层面强制开发者对异常进行处理,后者则不用。
两种异常的好坏或和使用方式大多还是根据场景而定。
一个现状
目前接手了一个项目,此项目定位为基础组件,对外部系统提供REST API服务和对应SDK。
其中SDK的大致逻辑为:
//调用rest api
public Result submit(Object args){
Result result;
Request req = createRequest(args); //构造rest请求
try{
result = doRestRequest(req); //请求http
}
catch(Exception e){
result = new Result();
result.code = -1; //发生异常时设置结果码为失败
}
return result;
}
逻辑上没有问题,调用失败的场景通过Result.code
告诉给使用者。
从现在分布式微服务应用角度看,远程调用发生错误应该要被认为是一种常态,开发者必须关心发生错误的场景。
这样的SDK封装往往会让使用方就会忽略错误的场景,直接提交本地事务完成请求,最终造成业务方与基础组件中的数据状态不一致。
改进
这种问题发生太多次了,每次都得事后手动处理。所以在下个版本的SDK中,打算使用Exception
进行改造。
//调用rest api
public Result submit(Object args) throws Exception{
Request req = createRequest(args); //构造rest请求
try{
return doRestRequest(req); //请求http
}
catch(Exception e){
throw new Exception(e); //此处可以对异常做一个封装
}
}
这样至少在代码层面上提示使用方必须处理错误的场景,进行数据回滚和在界面上进行提示。
最后编辑于 :2017.12.10 04:04:36
©著作权归作者所有,转载或内容合作请联系作者 平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。