Spring异常处理

时间:2015-09-28 15:45:23

标签: spring spring-mvc

因此,根据我的理解和尝试,我可以在控制器级别创建@ExceptionHandler来处理特定的异常。我也可以将事情移到@ControllerAdvice以捕捉全局异常。

我不确定一件事,但是假设我有@Controller有3种不同的方法,所有这些方法都可以抛出DataIntegrityViolationException,我想返回一个特定的错误消息每种方法。什么是处理这个问题的最佳做法?

我试图避免在每个方法中捕获异常,以免混乱代码。

1 个答案:

答案 0 :(得分:1)

我不确定何时捕获特定于一段代码的异常变得“混乱”。 (除非你一遍又一遍地重复相同的catch块,但你没有这样做 - 你需要每个方法的特定消息)。如您所列,您有3个选项:

  1. 在每种特定方法中捕获异常。它将更具体,在方法级别遵守SRP,使您可以完全控制处理异常的方式。
  2. 为该控制器编写异常处理程序。但这意味着,您必须使用某种分支(if-else)来确定要在哪个异常上发送哪个错误消息。这意味着从长远来看维护这种方法可能会很痛苦。查看代码的人不会知道可能会抛出异常并在不同的地方处理。
  3. 写一个控制器建议 - 除非你捕获真正的全局异常,没有一个单独的控制器可以/应该处理(例如缺少参数,一些通用500或400的情况,你不希望你的控制器担心,因为他们“不是你的业务的核心”,拥有一个异常处理程序的@Advice真的没什么价值。就个人而言,我认为,在某种程度上,它是多个地方的碎片化逻辑。
  4. 将自己视为将在3 - 5年后维护代码的人。它是否会使她/他的生活更容易扩展/修改一般维护这种方法(除非你记录并维护该文件)?