如何在 Grails 控制器之间传递错误消息?

Posted

技术标签:

【中文标题】如何在 Grails 控制器之间传递错误消息?【英文标题】:How to pass error messages between Grails controllers? 【发布时间】:2012-01-01 09:44:45 【问题描述】:

我正在尝试将错误消息从 grails 控制器传递到 grails 错误控制器,以便在 HTTP 响应中显示错误消息,但我不确定错误控制器中保存错误消息的参数是什么.

URLMappings.groovy

所有 500 个错误都映射到 ErrorsController

"500"(controller: "errors", action: "serverError")

通用控制器

def 
  try
    //do some work
  catch(Exception e)
    response.sendError(500, e.getMessage())
  

错误控制器

def serverError = 

  render( how can I access the exception details here?? )


我需要访问 ErrorsController 中的异常,以便将其输出到 HTTP 响应。

【问题讨论】:

【参考方案1】:

在控制器之间传递简短信息消息的常用方法是将其放在闪存范围内。例如:

def myAction = 
    try 
        ...
     catch (Exception e) 
        flash.message = e.message
        response.sendError(500)
    

但是,在这种特殊情况下,您为什么要捕获异常?如果让异常失败,grails 将自动生成服务器错误并调用“500”映射。在您的错误控制器中,异常将以request.exception 的形式提供。

【讨论】:

我注意到flash.message 有时会显示两次;首先是初始请求,然后是下一个请求;为了解决这个问题,我改用request.message,提出了一个问题:Flash 消息的意义何在?【参考方案2】:

在您的 ErrorsController 中:

def serverError() 
    render request.getAttribute('javax.servlet.error.message')

呈现来自e.getMessage()的消息。

【讨论】:

以上是关于如何在 Grails 控制器之间传递错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

GRAILS --- 如何在 g:link 中传递字符串文字到控制器方法

如何在 grails 中实现请求超时?

grails spring security rest status 401重定向到控制器的动作以抛出自定义错误消息

服务中的 Grails 消息源错误

Grails - 控制器和视图之间的通信

如何在 Grails 中显示异常?