此示例程序抛出folling nullpointer Exception:
2015-07-23 15:12:36,815 [http-bio-8090-exec-2] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /GrailsProject/HTMLAnalyser/start
Cannot invoke method analyse() on null object. Stacktrace follows:
Message: Cannot invoke method analyse() on null object
Line | Method
->> 14 | start in org.Bookstore.HTMLAnalyserController$$EPJGWngM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
我有这个控制器:
package org.Bookstore
import org.Bookstore.HTMLAnalyserService
class HTMLAnalyserController {
def htmlAnalyserService
def index() { }
def start() {
def html = "START"
html = htmlAnalyserService.analyse()
render html
}
}
我有这项服务:
package org.Bookstore
import grails.transaction.Transactional
@Transactional
class HTMLAnalyserService {
def serviceMethod() {
}
def analyse() {
println "ok"
def map = [:]
map.put("key", "value")
map.put("key2", "value2")
return map
}
}
我使用grails命令行工具创建了控制器和服务。 有人可以帮助我吗?
答案 0 :(得分:3)
原因是名称为HTMLAnalyserService
的类的属性名称为HTMLAnalyserService
(即相同)。
那是因为HTML
被假定为首字母缩略词(因为全部为大写),因此没有下降。如果您的类名称为HtmlAnalyserService
,则确实会对名为htmlAnalyserService
的属性执行依赖项注入。
测试依赖注入的正确名称的快速方法是使用方法grails.util.GrailsNameUtils#getPropertyName
(参见http://grails.github.io/grails-doc/2.2.x/api/grails/util/GrailsNameUtils.html#getPropertyName(java.lang.Class))。
import static grails.util.GrailsNameUtils.*
assert getPropertyName('HtmlAnalyserService') == 'htmlAnalyserService'
assert getPropertyName('HTMLAnalyserService') == 'HTMLAnalyserService'
您也可以将课程传递给它。
答案 1 :(得分:-1)
我找到了答案:
要使Grails依赖注入工作,您需要将变量命名为类名
所以对我来说,我必须写:
def HTMLAnalyserService
而不是def htmlAnalyserService(行为suxx)
甚至
HTMLAnalyserService xxx
xxx.analyse()
不工作
或
org.Bookstore.HTMLAnalyserService xxx
xxx.analyse()
没有工作,但GGTS显示我变量很好