Check Exception or Uncheck Exception

6 篇文章 0 订阅

Check Exception or Uncheck Exception

最近遇到Spring MVC的系统中有各种乱七八糟的异常,领导说重构下,统一的异常处理、支持国际化。

系统现状:

1. 系统中的异常一般有一个统一处理异常的AOP,但是没有严格的错误码,抛异常文案都是直接裸露在业务代码中

2. 系统抛的异常大多没有业务含义,NP也没有处理,大多都是直接的java代码级别的异常


明确问题后,大概要做以下的事情

1. 包含严格的错误码、清晰的文案(国际化问题只有多一些语种的文案)

2. 定义好业务异常

第一个问题很好搞,第二个问题在搞的过程中面临一个选择, java中的异常包含两种: Check Exception or UnCheck Exception.

UnCheck Exception是运行时的异常,Check Exception 是明确的异常。到底我们的业务异常用哪一种异常呢?或者都用?

(1) 假设用Check Exception

这样的好处就是接口暴露出来异常的类型,调用者会很明确知道需要处理哪些异常

坏处就是: 代码丑丑丑丑丑丑、每个接口定义后面都跟了一堆的异常。

(2) 假设用 Uncheck Exception

这样的好处就是接口简洁、确定就是上层根本不知道接口会抛出什么异常、业务逻辑要怎么处理这些异常?完全懵逼

(3) 混合用

好处不说了 双方的优点,坏处就是系统复杂,很多时候 写代码的都不知道哪些要定义成check或者uncheck Exception


我的经验是如果是Spring mvc这种会有一个统一处理异常的出口的系统,多用Uncheck Exception,少用Check Exception。除非特别的情况,需要非常明确上层系统要处理的。

说说我们系统改造的结果,由于我们系统Restful风格的接口, 异常的类型抽象出以下几大类

public class BusiException extends RuntimeException
{
}

以下的异常都 extends BusiException

ForbiddenException

InternalServiceErrorException

InvalidParameterException

ResourceConflictException

ResourceNotFoundException

UnauthorizedException

基本上跟集中http code一致。



待续-----------------------





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值