【问题标题】:Grails error handler always receives null pointerGrails 错误处理程序总是接收空指针
【发布时间】:2011-07-21 13:41:46
【问题描述】:

我们有一个自定义错误控制器,它会在我们所有的错误之后被调用。然而,我们抛出的大多数错误最终都会作为空指针进入控制器,即使最初的错误不是空指针。有任何想法吗?代码如下。如果需要,可以使用 Bootstrap 和 UrlMappings。谢谢

错误处理方法

def HandleErrors =
{

    def exception = request.exception.cause.class  

    if (exception) 
    { 
        Exception ex = request.exception  //This exception is always a NPE
            ...

抛出异常的代码块。我最初在这里没有尝试捕获,但想添加它,以便我确定抛出的异常不是 NPE。它是一个找不到文件的异常。

try{
        def writer = new FileWriter( new File(fileSaveLocation));
    } 
    catch ( ex)
    {
        throw(ex)
    }

编辑:添加推送到异常处理程序的异常

Exception:org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException
Cause:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

【问题讨论】:

    标签: exception grails groovy error-handling


    【解决方案1】:

    这不是因为您在错误处理程序中引用了 null 的内容,因此无意中抛出了另一个异常,又被捕获了?

    你可以尝试改变吗:

    def exception = request.exception.cause.class  
    

    def exception = request?.exception?.cause?.class  
    

    【讨论】:

    • 我进行了更改,异常仍然设置为 org.springframework.web.util.NestedServletException 而不是 null,因此它似乎不会无意中抛出/捕获第二个异常。
    • grails.util.GrailsUtil.sanitize(request.exception)).printStackTrace() 放在HandleErrors 方法的顶部是否会将NPE 的原因位置打印到控制台?
    • 其实问题出在 BootStrap 文件是如何设置的。我仍然不是 100% 导致问题的原因,因为它看起来设置得很好,但是从引导程序中删除 exceptionMappings 解决了这个问题。如果我们将来需要拥有多个错误控制器,那么我们将重新审视这个问题。不过感谢您的帮助!
    • 很高兴您找到了解决方案 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-01-15
    相关资源
    最近更新 更多