我在服务类中有一个方法,必须从控制器调用。控制器和服务类代码如下
文件夹grails-app/services
,文件FileFactoryService.groovy
package edu.rev.document
import grails.transaction.Transactional
Class FileFactoryService{
Document document = new Document() // Domain object
def build(byte[] fileArray){
String str = new String(fileArray, "UTF-8") // UTF encoding as invoice may contain negative values
String[] lines = str.split("\\r?\\n")
document.version = lines[0].substring(0,1)
document.name = lines[1].substring(0,25)
}
return document.properties.collect()
}
控制器代码:文件夹:grails-app/controllers
,文件:FileController.groovy
package edu.rev.document
Class FileController{
def fileFactoryService
def save(){
def file = request.getFile('file')
if(file.empty) {
flash.message = "File cannot be empty"
} else {
def myList = fileService.build(file.getBytes())
}
}
抛出的错误是
NullPointer exception when processing [POST]/../save
Cannot invoke method build() on NULL object
你能否指出我可能犯下的错误?如果您需要任何其他信息,请告诉我
编辑:这是代码。只是一个抬头,从服务中取出并在控制器本身实现的相同逻辑工作完全正常。还有一件事,当我使用“。”时。服务中的运营商(比如说document.
),它没有显示任何自动完成选项,如document.name
。
答案 0 :(得分:4)
发布所有代码有助于发现错误。控制器类中的这一行
def myList = fileService.build(file.getBytes())
应该是
def myList = fileFactoryService.build(file.getBytes())
答案 1 :(得分:1)
在您的控制器类中,您将服务声明为:
def fileService
但是服务类的名称是:
Class FileFactoryService
要使Grails依赖注入工作,您需要将变量命名为类名:
def fileFactoryService
然后这应该有用。