【问题标题】:Null Pointer exception when calling service method from controller从控制器调用服务方法时出现空指针异常
【发布时间】:2015-02-22 16:21:49
【问题描述】:

我在服务类中有一个必须从控制器调用的方法。控制器和服务类代码如下。
文件夹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。

【问题讨论】:

  • 您确定将您的FileService.groovy 文件放在services/.. 文件夹中吗?
  • 是的,我做到了。我在应用程序中使用 GGTS,所以这些事情是自动完成的。但是,是的,我确实验证了。
  • 我认为您在问题中显示的内容没有任何问题...
  • 我认为您需要向我们展示更多内容...您如何使用控制器?您是否自己实例化它(因为那是错误的,并且会导致您看到的错误)?这是作为 Web 请求、单元测试或其他的一部分发生的吗?
  • 您的代码看起来不像是有效的 Groovy 代码(例如 Class 等),并且异常看起来也不同。我相信您需要向我们展示原始代码才能找到问题

标签: grails groovy nullpointerexception


【解决方案1】:

发布所有代码有助于发现错误。控制器类中的这一行

def myList = fileService.build(file.getBytes())

应该是

def myList = fileFactoryService.build(file.getBytes())

【讨论】:

    【解决方案2】:

    在您的控制器类中,您将服务声明为:

    定义文件服务

    但是您的服务类的名称是:

    Class FileFactoryService
    

    为了让 Grails 依赖注入起作用,你需要像你的类名一样命名变量:

    def fileFactoryService
    

    那么这应该可以工作。

    【讨论】:

    • 我强烈建议您复制/粘贴您的真实代码,以免出现拼写错误。就像其他人说的那样,如果没有真正的代码,就不可能找到您所描述的问题。
    • 编辑后的版本是真实的代码。它是为一家研发机构开发的,所以我必须在这里和那里更改名称。放心,其他都一样。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2013-01-16
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多