Java 在Spring MVC web应用程序中,您应该如何处理控制器级别以下发生的异常?
假设您有一个结构如下的Spring web应用程序:Java 在Spring MVC web应用程序中,您应该如何处理控制器级别以下发生的异常?,java,model-view-controller,spring,exception-handling,spring-mvc,Java,Model View Controller,Spring,Exception Handling,Spring Mvc,假设您有一个结构如下的Spring web应用程序: com/ myapp/ controller/ model/ service/ 您应该如何处理控制器级别以下发生的异常 您是否应该让模型层和服务层中的方法将其异常抛出到控制器层 一旦它们到达控制器,该如何处理它们 您是否总是向用户显示相同的错误页面,但在日志文件中写入详细的异常情况?这在很大程度上取决于具体情况: 您可以将异常消息(由某些异常转换机制转换为人类可读的表示形
com/
myapp/
controller/
model/
service/
您应该如何处理控制器级别以下发生的异常
您是否应该让模型层和服务层中的方法将其异常抛出到控制器层
一旦它们到达控制器,该如何处理它们
您是否总是向用户显示相同的错误页面,但在日志文件中写入详细的异常情况?这在很大程度上取决于具体情况:
- 您可以将异常消息(由某些异常转换机制转换为人类可读的表示形式)与验证消息一起显示,例如“电子邮件发送失败,请稍后重试”
- 如果无法从中恢复异常,则可以重定向到显示可读解释的页面
- 你可以重定向到一个通用的500页,上面写着“哎呀,出了点问题”
就可用性而言,选择一个您认为最适合您的用例的选项。这在很大程度上取决于具体的用例:
- 您可以将异常消息(由某些异常转换机制转换为人类可读的表示形式)与验证消息一起显示,例如“电子邮件发送失败,请稍后重试”
- 如果无法从中恢复异常,则可以重定向到显示可读解释的页面
- 你可以重定向到一个通用的500页,上面写着“哎呀,出了点问题”
选择一个在可用性方面最适合您的用例的选项。我认为记录和处理系统异常应该由服务层完成。如果您从面向服务的角度考虑,可能没有一个UI调用特定的服务。所有系统级清理都需要在该层中进行
话虽如此,任何异常都不应逃脱控制器层。服务层和控制器层之间需要有足够的通信,以便控制器可以友好、易于理解的方式告诉用户正在发生什么。向用户反馈信息是控制器的职责。我认为记录和处理系统异常应该由服务层完成。如果您从面向服务的角度考虑,可能没有一个UI调用特定的服务。所有系统级清理都需要在该层中进行 话虽如此,任何异常都不应逃脱控制器层。服务层和控制器层之间需要有足够的通信,以便控制器可以友好、易于理解的方式告诉用户正在发生什么。控制器的职责是向用户反馈信息