【问题标题】:How do I implement error-handling in Grails?如何在 Grails 中实现错误处理?
【发布时间】:2010-11-20 18:39:39
【问题描述】:

显然,我刚刚开始使用 Grails。我已经创建了我的域类和控制器,将我自己的逻辑添加到了控制器中,并且一切正常——只要没有出错。

我的自定义控制器操作如下所示:

def create = {
    try
    {
        // Get the parameters.
        def uid=params["uid"]
        def pwd=params["pwd"]
        if (!uid || !pwd)
        {
            throw new Exception('User ID and password are required')
        }
        /* other code */   
    }
    catch (Exception ex)
    {
        println ex.getMessage()
    }
}

我的代码 (/* other code */) 运行良好。但是,当抛出异常时,错误消息会打印到控制台,并且浏览器会抛出 404 错误。显然,这不是要走的路。

这样做的正确方法是什么?

TIA,

约翰

【问题讨论】:

    标签: grails error-handling


    【解决方案1】:

    根据您提供的代码 sn-p,我猜您真正想要的是验证某种用户输入(可能是表单)。如果是这种情况,抛出异常绝对不是要走的路。只有在发生异常(意外的事情,通常在正常操作期间不应该发生的事情)发生时,您才应该抛出异常 - 顺便说一句,这也适用于其他编程语言。

    Grails 为验证用户输入提供了非常好的支持。根据上下文,您应该在域类中定义约束,或者使用command objects 并在那里定义约束(如果要验证的字段不直接由域类支持)。通过这种方式,Grails 会根据您的约束(有许多不同的类型,例如大小、空白/非空白,甚至 RegExp 约束)自动验证用户输入,并将错误和相应的消息存储在域类中。然后,您可以轻松地在表单(视图)中显示适当的本地化错误消息。将错误显示在它们引用的输入字段旁边是一种很好的做法。

    查看参考文档 - 特别是 chapter 7 (validation)

    您得到的 404 可能不是由于(捕获的)异常,而是因为您的操作中没有名为 create.gsp 的视图或 render/redirect 调用。

    我希望这能回答您的问题,或者至少为您指明正确的方向。祝你好运!

    【讨论】:

      【解决方案2】:

      正如 Daniel 所说,在你的域类中使用约束,并在你的控制器中使用 validate() 方法而不是抛出异常。

      如果 validate() 返回 false,则再次呈现表单并显示错误消息。

      【讨论】:

        【解决方案3】:

        在您的 BootStrap.groovy 文件中,您可以为不同的 Java 异常设置包罗万象的处理程序。 Here 是一篇关于它的文章。

        【讨论】:

        • -1:这就是为什么你永远不应该只链接一个答案。链接失效。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多