2017-09-08 6 views
0

grails 3.1.13 guide에 따라 서비스 의존성을 컨트롤러에 추가하려하지만 어떻게 든 저에게 맞지 않습니다. Cannot get property 'serviceMethod' on null object.에 대해 NullPointerException을 던지고 있습니다. 아래에서 재현 단계를 언급하고 있습니다.서비스에서 컨트롤러로의 Grails 종속성 삽입이 작동하지 않습니다.

다음 실행 명령

grails create-app DepInjectionTest 
grails create-controller com.abc.project.KpiReport 
grails create-service com.abc.project.KpiReport 

위의 디렉토리 구조 아래에 생성 enter image description here

KpiReportService

@Transactional 
class KpiReportService { 

    def serviceMethod() { 
     return "Hello from KpiReportService" 
    } 
} 

KpiReportController

class KpiReportController { 
    def index() { 
     def kpiReportService 
     render kpiReportService.serviceMethod 
     //render "Hello from KpiReportController" 
    } 
} 
,363,210

요청 enter image description here

내가 Grails에 새로운 오전에 대한 우체부를 사용하여 예외

Grails application running at http://localhost:8080 in environment: development 
ERROR org.grails.web.errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [POST] /KpiReport/index 
Cannot get property 'serviceMethod' on null object. Stacktrace follows: 
java.lang.reflect.InvocationTargetException: null 
     at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:210) 
     at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:187) 
     at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
     at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77) 
     at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: Cannot get property 'serviceMethod' on null object 
     at com.abc.project.KpiReportController.index(KpiReportController.groovy:7) 
     ... 13 common frames omitted 

, 내가 뭔가를 놓친 게있을 수 있습니다, 오해 무슨 일이 일어나고 있는지 알아내는 데 도움이 바랍니다.

답변

0

서비스 클래스 변수

class KpiReportController { 
    def kpiReportService 

    def index() { 
     render kpiReportService.serviceMethod() 
     //render "Hello from KpiReportController" 
    } 
} 
+1

거기에 표시되는 내용은 작동하지 않습니다. 원래의 포스터와 같은 실수를 범했습니다. 'kpiReportService.serviceMethod' 대신에'kpiReportService.serviceMethod()'를 원한다. –

+0

당신 말이 맞아요. 그러나 2 개의 실패가있었습니다 - 제 대답이 예외 중 하나를 수정했습니다. – gregorr

+0

동의. 내가 보여준 코드가 작동하지 않는다는 것을 지적했습니다. 감사! –

1

오류 메시지가 존재하지 않는 속성에 언급하는 표시로 주입된다. render kpiReportService.serviceMethod 대신 render kpiReportService.serviceMethod()이 필요합니다.

+0

이것은'index' 메쏘드 밖에서'kpiReportService' 속성을 선언 할 필요가 있습니다. –