【发布时间】:2014-04-16 11:02:00
【问题描述】:
Grails 使 Controller 调用 Service 和 Controller 将请求转发到另一个 Controller 变得非常容易。
所以假设你有一个这样的服务方法
List<String> updateNames() {
...
}
您可以从任何控制器轻松调用它。
我想知道,如果你有一个边缘情况,你意识到你的服务方法中存在验证问题。您不想将异常抛出回您的控制器,因为这并不是一个真正的例外情况。但是您不能将错误消息从您的服务返回给调用的控制器,因为这意味着您必须使用一些包装器对象而不是一个不错的列表
对于这些情况,您是否可以让服务将服务器端转发到另一个控制器,这可能会向用户返回错误响应?
谢谢。
【问题讨论】:
-
这在我看来是一个理想的例外用例......
-
同意塞尔吉奥和约书亚的观点。通过使用命令对象或域实例本身,甚至可以在进入服务类之前处理所有验证异常。正如 Joshua 提到的关注点分离,服务不应该知道 http 调用或任何验证问题。它应该关心业务异常/场景。话虽如此,从服务中抛出运行时异常或错误将是我回滚事务的最后一件事。我们应该使用
TransactionAspectSupport来处理回滚。 -
@Ian Roberts 为什么?这是您期望可能发生的事情,用户可能输入了错误的数据。您的系统本身实际上并没有出现任何问题。
标签: grails