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

如何在Grails中实现错误处理?,grails,error-handling,Grails,Error Handling,显然,我只是从圣杯开始。我已经创建了我的域类和控制器,向控制器添加了我自己的逻辑,只要没有任何问题,一切都正常工作 我的自定义控制器操作如下所示: def create = { try { // Get the parameters. def uid=params["uid"] def pwd=params["pwd"] if (!uid || !pwd) { throw ne

显然,我只是从圣杯开始。我已经创建了我的域类和控制器,向控制器添加了我自己的逻辑,只要没有任何问题,一切都正常工作

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

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()
    }
}
我的代码(
/*其他代码*/
)工作正常。但是,当抛出异常时,错误消息将打印到控制台,浏览器抛出404错误。显然,这不是一个好办法

正确的方法是什么

蒂亚


John

在BootStrap.groovy文件中,您可以为不同的Java异常设置捕获所有处理程序。在BootStrap.groovy文件中,您可以为不同的Java异常设置捕获所有处理程序。是一篇关于它的文章。

根据您提供的代码片段,我想您真正想要的是验证某种用户输入(可能是表单)。如果是这样的话,抛出异常肯定不是好办法。只有在发生异常(正常操作期间通常不应发生的意外情况)时,才应该抛出异常-顺便说一句,其他编程语言也是如此

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

请查看参考文档,尤其是

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


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

根据您提供的代码片段,我想您真正想要的是验证某种用户输入(可能是表单)。如果是这样的话,抛出异常肯定不是好办法。只有在发生异常(正常操作期间通常不应发生的意外情况)时,才应该抛出异常-顺便说一句,其他编程语言也是如此

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

请查看参考文档,尤其是

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


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

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


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

如Daniel所说,在域类中使用约束,在控制器中使用validate()方法,而不是引发异常


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

-1:这就是为什么您永远不应该只链接答案。链接腐烂。-1:这就是为什么你永远不应该只链接一个答案。链接腐烂。