Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动连线变量';s方法为空_Java_Spring_Spring Boot_Autowired_Spring Restcontroller - Fatal编程技术网

Java 自动连线变量';s方法为空

Java 自动连线变量';s方法为空,java,spring,spring-boot,autowired,spring-restcontroller,Java,Spring,Spring Boot,Autowired,Spring Restcontroller,我有以下REST控制器: @RestController @RequestMapping("/api/v1/slices") public class SlicesControllerImpl implements SlicesController { private static final org.edgexfoundry.support.logging.client.EdgeXLogger logger = org.edgexfoundry.support.logging.c

我有以下REST控制器:

@RestController
@RequestMapping("/api/v1/slices")
public class SlicesControllerImpl implements SlicesController {

    private static final org.edgexfoundry.support.logging.client.EdgeXLogger logger =
  org.edgexfoundry.support.logging.client.EdgeXLoggerFactory
      .getEdgeXLogger(SlicesControllerImpl.class);


    @RequestMapping(method = RequestMethod.POST)
    @Override
    public void addSlice() {
        logger.info("Mediator received request to add slice.");
        Operations operations = new Operations();
        operations.getMetadata();
    }
}
操作
为:

@Service
public class Operations {

    @Autowired
    private DeviceClient deviceClient;

    public void getMetadata() {
        List<Device> devices = deviceClient.devices();
        System.out.println("Devices received: " + devices);
    }

}
当我点击时,我得到以下错误:

...
...

[2019-02-07 12:11:46.788] boot - 1  INFO [http-nio-5252-exec-2] ---  SlicesControllerImpl: Mediator received request to add slice. 

[2019-02-07 12:11:46.807] boot - 1 ERROR [http-nio-5252-exec-2] --- [dispatcherServlet]: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at org.edgexfoundry.mediatorLogic.Operations.getMetadata(Operations.java:80)
    at org.edgexfoundry.controller.impl.SlicesControllerImpl.addSlice(SlicesControllerImpl.java:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    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 javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

你知道为什么变量
DeviceClient
不能自动连接并且它的方法为空吗?

不是因为
Operations=newoperations()?您创建了新的操作实例,因此
专用设备客户端设备客户端
null
,因为它在Spring上下文之外。我想是吧


您应该在切片控制器impl中也执行
@Autowired
操作
,在切片控制器impl中,不要按以下方式实例化操作

Operations operations = new Operations();
而是像下面这样使用

@Autowired
Operations operations;
然后调用
operations.getMetadata()

您正在Spring容器外部创建Operations类的新实例。它不知道那个例子

@RestController
@RequestMapping("/api/v1/slices")
public class SlicesControllerImpl implements SlicesController {

  private static final org.edgexfoundry.support.logging.client.EdgeXLogger logger = org.edgexfoundry.support.logging.client.EdgeXLoggerFactory
      .getEdgeXLogger(SlicesControllerImpl.class);

  private final Operations operations;

  public SlicesControllerImpl(Operations operations) {
    this.operations = operations;
  }

  @RequestMapping(method = RequestMethod.POST)
  @Override
  public void addSlice() {
    logger.info("Mediator received request to add slice.");
    operations.getMetadata();
  }
}

自Spring 4.x以来,会自动尝试使用单个构造函数进行自动布线,谢谢!我不明白,即使是外部类也应该是“自动连线”的!谢谢我不明白,即使是外部类也应该是“自动连线”的!谢谢我不明白,即使是外部类也应该是“自动连线”的!
logger.info("Mediator received request to add slice.");
Operations operations = new Operations();
operations.getMetadata();
@RestController
@RequestMapping("/api/v1/slices")
public class SlicesControllerImpl implements SlicesController {

  private static final org.edgexfoundry.support.logging.client.EdgeXLogger logger = org.edgexfoundry.support.logging.client.EdgeXLoggerFactory
      .getEdgeXLogger(SlicesControllerImpl.class);

  private final Operations operations;

  public SlicesControllerImpl(Operations operations) {
    this.operations = operations;
  }

  @RequestMapping(method = RequestMethod.POST)
  @Override
  public void addSlice() {
    logger.info("Mediator received request to add slice.");
    operations.getMetadata();
  }
}