繁体   English   中英

尝试保存时出现Spring H2数据库错误

[英]Spring h2 database error when trying to save

每当我尝试保存到springboot h2数据库时,它都会因以下错误而崩溃,我似乎无能为力。 我也附上了代码。 我春天刚来。

我在网上遵循了一些教程,但目前仍处于停滞状态。

2019-08-14 23:17:33.559信息6296 --- [nio-8080-exec-1] oaccC [Tomcat]。[localhost]。[/]:初始化Spring DispatcherServlet'dispatcherServlet'2019-08-14 23: 17:33.559 INFO 6296-[nio-8080-exec-1] osweb.servlet.DispatcherServlet:初始化Servlet'dispatcherServlet'2019-08-14 23:17:33.567 INFO 6296-[nio-8080-exec- 1] osweb.servlet.DispatcherServlet:在8毫秒内完成初始化2019-08-14 23:17:33.607错误6296 --- [nio-8080-exec-1] oaccC [。[。[/]。[dispatcherServlet]:路径为[]的Servlet [dispatcherServlet]的Servlet.service()抛出异常[请求处理失败; 嵌套异常是java.lang.NullPointerException],其根本原因是

java.lang.NullPointerException:在com.test.lottery.lottery.LotteryController.CreateTicket(LotteryController.java:36)〜[classes /:na]在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本地方法)处为null )〜[na:na] at java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:na] at java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43)〜[na:na] at java.base / java.lang.reflect.Method.invoke(Method.java:567)〜[na:na] at org.springframework.web.method.support.InvocableHandlerMethod .doInvoke(InvocableHandlerMethod.java:190)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) 〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)〜[spring-webmvc -5 .1.9.RELEASE.jar:5.1.9.RELEASE],位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)〜[spring-webmvc-5.1.9.RELEASE。 jar:5.1.9.RELEASE]位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)〜[spring-webmvc-5.1.9.RELEASE.jar:5.1.9 .RELEASE]在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)〜[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework .web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)〜[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet。 java:942)〜[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)〜[spring-webmvc-5.1 .9.RELEASE.jar:5.1.9 [RELEASE],位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)〜[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE],位于javax.servlet.http.HttpServlet .service(HttpServlet.java:634)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)〜[spring- webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]在javax.servlet.http.HttpServlet.service(HttpServlet.java:741)〜[tomcat-embed-core-9.0.22.jar:9.0.22 ] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)〜[tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)〜[tomcat- embed-websocket-9.0.22.jar:9.0.22]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core-9.0 .22.jar:9.0.22],位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core-9.0.22.jar:9.0.22],位于org.springframework .web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter。 java:118)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core -org.apache.catalina.core.ApplicationFilterChain.doFilter(-ApplicationFilterChain.java:166)的-9.0.22.jar:9.0.22]〜org的[tomcat-embed-core-9.0.22.jar:9.0.22] .springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:118)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.a pache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java :166)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)〜[spring-web-5.1.9。 RELEASE.jar:5.1.9.RELEASE],位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE] org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain)上的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core-9.0.22.jar:9.0.22] .java:166)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)〜[spring-web-5.1。 9.RELEASE.jar:5.1.9.RELEASE]在org.springfra mework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)〜[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain .java:193)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core- 9.0.22.jar:9.0.22],位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)〜[tomcat-embed-core-9.0.22.jar:9.0.22],位于组织。 apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)〜[tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java :490)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)〜[tomcat-embed-core-9.0。 22.jar:9.0.22],位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)〜[tomcat-embed-core-9.0 .22.jar:9.0.22],位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)〜[tomcat-embed-core-9.0.22.jar:9.0.22],位于org.apache .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java: 408)〜[tomcat-embed-core-9.0.22.jar:9.0.22] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)〜[tomcat-embed-core-9.0.22.jar :9.0.22],位于org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:853)〜[tomcat-embed-core-9.0.22.jar:9.0.22],位于org.apache.tomcat.util .net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1587)〜[tomcat-embed-core-9.0.22.jar:9.0.22]在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase。 java:49)〜[tomcat-embed-core-9.0.22.jar:9.0.22] at java.base / java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)〜[na:na] at java.base / java.util。 parallel.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:628)〜[na:na]在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)〜[tomcat-embed-core -9.0.22.jar:9.0.22],位于java.base / java.lang.Thread.run(Thread.java:835)〜[na:na]

编码

@Entity

public class TicketRequest {
    int id;
    Boolean checked;
    Map<Integer, int[]> num_lines;


    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id")  
public int getId(){
    return id;
}

    @Column(name = "checked")  
public Boolean getChecked(){
    return checked;
}

    @ElementCollection
    @Column(name = "ticket_num")  
public Map<Integer, int[]> getTicketNum(){
    return num_lines;
}

public void setId(int id) {
    this.id = id;
}

public void setChecked(Boolean checked) {
    this.checked = checked;
}

public void setTicketNum(Map<Integer, int[]> num_lines){
    this.num_lines = num_lines;
}

@RestController的代码:

@RestController
public class LotteryController {

       private TicketRepository TicketRepository;

  @RequestMapping("/ticket")
  public TicketRequest CreateTicket(@RequestParam int line) {

      Map<Integer, int[]> lottery_lines = new HashMap<Integer,  int[]>();

      for(int i = 1; i<= line; i++) {
          int[] ints = new Random().ints(0, 3).distinct().limit(3).toArray();
          lottery_lines.put(i,  ints);

     // System.out.println("The Value are: " + Arrays.toString(lottery_lines.get(0)));
     } 

      TicketRequest response = new TicketRequest();
      response.setId(1);
      response.setChecked(false);
      response.setTicketNum(lottery_lines);


      TicketRepository.save(response);

    return response;

  }

}
public interface TicketRepository extends CrudRepository<TicketRequest, Integer>{

}

尝试在控制器中为TicketRepository添加@Autowired批注。

似乎控制器中的TicketRepository为null,因为您没有将TicketRepository作为bean注入。

通过查看该堆栈跟踪,该错误与H2无关,您在控制器的第36行上获得了空指针。 不幸的是,我无法从您的代码中分辨出哪一行是数字36。

仔细看一下第36行,尝试找出可能为空的内容。

我的猜测是第36行是TicketRepository.save(response); TicketRepository从未在您的代码中初始化。 您可能只是在该字段上缺少@Autowire

LotteryController中的TicketRepository TicketRepository需要@Autowired表示法。

@RestController
public class LotteryController {

    @Autowired           
    private TicketRepository ticketRepository;

    @RequestMapping("/ticket")
    public TicketRequest CreateTicket(@RequestParam int line) {

      Map<Integer, int[]> lottery_lines = new HashMap<Integer,  int[]>();

      for(int i = 1; i<= line; i++) {
          int[] ints = new Random().ints(0, 3).distinct().limit(3).toArray();
          lottery_lines.put(i,  ints);

     // System.out.println("The Value are: " + Arrays.toString(lottery_lines.get(0)));
     } 

      TicketRequest response = new TicketRequest();
      response.setId(1);
      response.setChecked(false);
      response.setTicketNum(lottery_lines);


      ticketRepository.save(response);

    return response;

  }

}

Spring容器负责管理Bean,当您使用@Autowired注释进行注释时,它将注入TicketRepository Bean。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM