控制器继承grails 2.2

Gen*_*sky 4 grails

我有一些代码,我试图从Grails 1.3.7移植到Grails 2.2.

目前的问题是我有一个BaseController类定义了一些便利方法,以及从中继承的特定控制器(实际由Grails实例化的控制器).

package com.fxpal.querium

import grails.converters.JSON
import groovy.lang.Closure;

abstract class BaseController {

    protected def executeSafely(Closure c) {
        def resp = null
        try { 
            populateContext();
            resp = c() 
        }
        catch(Exception ex) {
            resp = [error: ex.message]
            ex.printStackTrace()
        }
        def json = resp as JSON
        return json
    }

    protected void populateContext() {

    }
}
Run Code Online (Sandbox Code Playgroud)

派生类的一个例子是

package com.fxpal.querium

import grails.converters.JSON
import grails.plugins.springsecurity.Secured
import javax.servlet.http.HttpServletResponse

@Secured(['IS_AUTHENTICATED_REMEMBERED'])
class DocumentController extends BaseController {

    def grailsApplication

    @Secured(['IS_AUTHENTICATED_ANONYMOUSLY'])
    def getText = {
        try {
            String text = new URL(grailsApplication.config.querium.docurl + params.paperId).text
            render contentType: 'text/plain', text: text            
        }
        catch(Exception ex) {
            render contentType: 'text/plain', text: "Error loading document: ${ex.getMessage()}; please retry"
        }
    }

...
}
Run Code Online (Sandbox Code Playgroud)

这适用于Grails 1.3.7.当我尝试使用Grails 2.2编译我的应用程序时,出现以下错误:

C:\code\querium\AppServer-grails-2\grails-app\controllers\com\fxpal\querium\DocumentController.groovy: -1: The return ty
pe of java.lang.Object getGrailsApplication() in com.fxpal.querium.DocumentController is incompatible with org.codehaus.
groovy.grails.commons.GrailsApplication getGrailsApplication() in com.fxpal.querium.BaseController
. At [-1:-1]  @ line -1, column -1.
Run Code Online (Sandbox Code Playgroud)

这种模式不再受支持吗?我尝试添加abstractBaseController声明(这是没有必要的Grails 1.3.7),但似乎没有任何区别.如果重要的话,我在干净之后编译了我的代码.

PS:对于那些可以:请创建grails-2.2标签的人

Bur*_*ith 13

删除def grailsApplication- 该字段已经通过AST转换作为类型字段(GrailsApplication)添加到类字节码中,因此您的def字段创建第二个具有较弱类型(Object)的get/set对.