如何在 Grails 中实现错误处理?

2 error-handling grails

显然,我刚刚开始接触 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

TIA,

约翰

Dan*_*ser 5

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

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

查看参考文档 - 特别是第 7 章(验证)

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

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