Servlets Grails异步响应呈现与Servlet 3.0异步呈现

Servlets Grails异步响应呈现与Servlet 3.0异步呈现,servlets,grails,asynchronous,promise,Servlets,Grails,Asynchronous,Promise,我在控制器中有一个应该返回JSON的方法 根据我对的解释,在子主题Async Response Rendering下,我可以使用任务构造包装我的I/O调用 task{}这应该可以进行异步响应呈现 所以我的方法看起来像 def getSomeJSON() { task { def someList = someService.getList() render([key: someList] as JSON) } } 该方法工作正常,但我看到我的日

我在控制器中有一个应该返回JSON的方法

根据我对的解释,在子主题Async Response Rendering下,我可以使用任务构造包装我的I/O调用
task{}
这应该可以进行异步响应呈现

所以我的方法看起来像

def getSomeJSON() { 
    task {
        def someList = someService.getList()
        render([key: someList] as JSON)
    }
}
该方法工作正常,但我看到我的日志中有许多错误

ERROR o.g.a.f.gpars.LoggingPoolFactory - Async execution error: null
java.lang.NullPointerException: null
我不确定这是什么原因造成的。我无法在本地机器上复制此内容

所以我的问题是上面的代码片段有什么问题? 我对医生的解释错了吗

这与“Servlet 3.0异步呈现”有何不同

编辑:

我更新了我的方法如下:

import static grails.async.Promises.*

    def getSomeJSON() { 
            Promise jsonPromise = task {
                def someList = someService.getList()
                render([key: someList] as JSON)
            }
            jsonPromise
        }
因此,我在这里所做的更改是按照文档中的建议,从控制器方法显式返回承诺。引用文件:

这是通过从控制器返回承诺实例来完成的 行动

但我仍然得到了错误:

ERROR o.g.a.f.gpars.LoggingPoolFactory - Async execution error: null
java.lang.NullPointerException: null
    at org.apache.catalina.connector.Request.notifyAttributeAssigned(Request.java:1547) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at org.apache.catalina.connector.Request.setAttribute(Request.java:1538) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:541) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:279) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:239) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:239) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:239) ~[tomcat-embed-core-7.0.54.jar:7.0.54]
    at org.codehaus.groovy.grails.web.util.WebUtils.storeGrailsWebRequest(WebUtils.java:431) ~[grails-web-common-2.4.2.jar:2.4.2]
    at org.codehaus.groovy.grails.plugins.web.async.WebRequestPromsiseDecorator$_decorate_closure1.doCall(WebRequestPromiseDecoratorLookupStrategy.groovy:55) ~[grails-plugin-async-2.4.2.jar:2.4.2]
    at org.codehaus.groovy.grails.plugins.web.async.WebRequestPromsiseDecorator$_decorate_closure1.call(WebRequestPromiseDecoratorLookupStrategy.groovy) ~[grails-plugin-async-2.4.2.jar:2.4.2]
    at org.grails.async.factory.gpars.GparsPromise$_onError_closure2.doCall(GparsPromise.groovy:72) ~[grails-async-2.4.2.jar:2.4.2]
    at org.grails.async.factory.gpars.GparsPromise$_onError_closure2.call(GparsPromise.groovy) ~[grails-async-2.4.2.jar:2.4.2]
    at groovyx.gpars.dataflow.DataCallback$1.run(DataCallback.java:62) ~[gpars-1.2.1.jar:1.2.1]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_71]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_71]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_71]

“someService”是否真的被注入到您的类中(我猜它是一个控制器)?这似乎是NPE唯一明显的候选。我没有在这里粘贴整个类,它被注入到类中,服务返回的响应可能类似:我在发布我的问题之前确实看到了这个问题,它们似乎没有关系