关于Java抛自定义异常的问题

新手上路,请多包涵

为什么有时候想给出前端提示信息要抛出自定义异常而不返回状态码,抛异常的成本不是比返回状态码更大吗?

阅读 14.2k
2 个回答

看取舍,这玩意儿团队内部自己协商好就可以了。

P.S. 首先我们得先明确即便是抛异常、也会是有一个统一的拦截器对异常进行包装成友好响应后再返回给客户端,而不是真的直接抛个异常就不管了。那肯定是不可取的。

抛异常的好处是处理起来比较方便,因为未必所有错误的产生都在 Controller 层。

比如可能是某个 Service 层里产生的,那这种时候 Service 是不方便直接返回错误结果的。要么你把 HttpContext 注入到 Service 里、让 Service 直接能输出响应(很少见但也不是没有);要么 Service 返回包装类型、Controller 里再做判断继而返回自定义错误响应。但你会发现写起来肯定都不如直接抛异常简单。

而异常的开销主要来自于跟踪堆栈信息,而 WebAPI 里这种自定义异常往往是不需要堆栈信息的,你完全可以在自定义异常的时候重写一下 fillInStackTrace,这样的话开销就很低了。

如果就确实就追求高性能、连一点点开销都无法忍受(但说实话都用 Java 了还要啥自行车 😂)的话,那就选择不抛异常,也没问题。

缺点是运行成本略高一丢丢
好处是容易写,容易统一处理
到处检查 result.code != 0 这种东西会出人命的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题