【发布时间】:2016-01-11 17:44:11
【问题描述】:
我想在控制器中使用业务层方法,但我不断收到 nullPointerException。好吧,我知道这是因为我无法实例化业务对象,因为我正在处理接口。那么如何通过业务接口从控制器调用业务方法呢?这是一个示例业务界面:
public interface ICompagnieBuisness {
public String depa="";
String depString(String dep); }
这是我想调用 depString(String dep) 方法以返回一个字符串的控制器,我将把它放入视图中使用的消息中:
`package com.crun.controller;
@Controller
public class HelloWorld {
@Autowired
private static ICompagnieBuisness icb;
public void setIcb() {
this.icb = icb;
}
@RequestMapping("/welcome")
public ModelAndView helloWorld() {
String dep=icb.depString(a);
String message = "<br><div style='text-align:center;'>"
+ "<h3>***Hello World, Spring MVC Tutorial</h3> </div><br><br>";
return new ModelAndView("welcome", "message", message);
}
}`
这是商务舱: 包 com.crun.buisness;
import java.util.List;
import com.crunc.dao.ICompagnieDAO;
public class ICompagnieBuisnessImpl implements ICompagnieBuisness{
private static ICompagnieDAO dao;
public String depa;
public String depString(String dep) {
dep="Message sent from buisness layer";
return dep;
}
}
这是错误
GRAVE: Servlet.service() for servlet [crun] in context with path [/CrunSpringMVCTutorial] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at com.crun.controller.CrunHelloWorld.helloWorld(CrunHelloWorld.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandl erMethod(HandlerMethodInvoker.java:175)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.in vokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.ha ndle(AnnotationMethodHandlerAdapter.java:434)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
非常感谢!
【问题讨论】:
-
您为什么将您的 ICompagnieBuisness 设为静态?
-
我之前用的不一样,不一定是静态的,但是不知道如何通过业务接口来使用控制器中的业务方法。
-
如果你想 @Autowired 你的 ICompagnieBuisness,那么你的注释必须在 icb 属性之上而不是下面。
-
我刚刚更新了你说的代码,但尝试仍然得到同样的错误。
-
能否请您发布所有例外情况,CompagnieBuisness 类,以便我们可以清楚地跟踪问题。您是否在 CompagnieBuisness 类中使用了 @Service 注释?
标签: spring-mvc jakarta-ee model-view-controller controller