gpt4 book ai didi

spring - 我应该将异常处理放在 Spring MVC 的什么位置?

转载 作者:行者123 更新时间:2023-12-01 22:26:12 25 4
gpt4 key购买 nike

我在谷歌上搜索了很多,几乎所有我发现的例子都使用了 Controller 中的异常处理和自己的异常处理程序。我一直认为这应该在程序的服务层完成。如果不是,我真的不明白为什么要创建单独的服务层。

另外,如果我在 Controller 中实现异常处理,是否意味着我必须在之前的所有层中抛出异常?

最佳答案

除非您可以从错误情况中恢复,否则您必须让异常一直弹出到 Controller ,以便您可以将它们转换为 HTTP 错误并将该错误发回给客户端。

因为(例如)“无效输入”必须作为 400 Bad Request HTTP 状态代码返回给客户端,很明显只有 Spring MVC Controller 能够做到这一点。

这就是为什么为不同类型的错误定义错误处理方法并将异常映射到状态代码可能是个好主意。这种映射的一个例子是:

  • IllegalArgumentException -> 400 错误请求
  • IllegalStateException -> 503 服务不可用
  • AuthenticationException -> 401 未经授权
  • AccessDeniedException|SecurityException -> 403 Forbidden
  • UnsupportedOperationException -> 501 未实现
  • Throwable(任何其他)-> 500 内部服务器错误

服务层应该只处理可恢复异常,它应该将低级异常转换(包装)为一组连贯的定义明确的异常(例如catch (FileNotFoundException e) -> 抛出新的 IllegalStateException(e)).

所以它不会变得无用。此外,该层应包含所有“业务逻辑”,并让 Spring MVC(或任何 Web 框架) Controller 只关注 HTTP 内容。

关于spring - 我应该将异常处理放在 Spring MVC 的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966211/

25 4 0