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

标签 grails error-handling

显然,我只是从Grails开始。我已经创建了域类和 Controller ,并向 Controller 添加了自己的逻辑,并且一切正常—只要没有出错。

我的自定义 Controller 操作如下所示:

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为验证用户输入提供了很好的支持。根据上下文,您应该在域类中定义约束,或者使用command objects并在其中定义约束(如果要验证的字段不是由域类直接支持的)。这样,Grails会根据您的约束条件(有很多不同的类型,例如大小,空白/非空白甚至RegExp约束条件)自动验证用户输入,并将错误和相应的消息存储在domain类中。然后,您可以轻松地在表单( View )中显示适当的本地化错误消息。最好在错误所在的输入字段旁边显示错误。

看一下引用文档-特别是chapter 7 (validation)

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

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

关于grails - 如何在Grails中实现错误处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296857/

相关文章:

grails - 将搜索限制到特定域

grails - GORM不会在两个类之间的一对多关系中创建表

java - 使用自定义消息完成for循环后引发异常

用于跟踪错误发生位置的常用 C 习惯用法

c# - 如何在C#中停止相机?使用grabber.dispose时出错

grails - grails test-app -coverage不包括分支模式下的功能测试的范围

rest - 无法将RestBuilder导入Grails 2.4.5项目

sql - GORM - 动态查询 - 分离标准?

php - 在 Magentos 后端向人员开具发票时出现无效的方法错误

c# - ASP.NET MVC2-try/catch(throw?) block 的数量和位置