我有一些代码试图从 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() {
}
}
派生类的一个例子是
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"
}
}
...
}
这在 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.
是否不再支持此模式?我尝试添加abstract
声明BaseController
(在 Grails 1.3.7 中没有必要),但这似乎没有任何区别。如果这很重要,我在清理后编译了我的代码。
PS:对于那些可以:请创建一个grails-2.2
标签