前提・実現したいこと
javaを使用して、
spring boot + jpa + PostgreSQLで勉強のため、DB検索結果を
一覧画面表示するWebアプリを作っています。
JpaでDB検索を行う箇所(findAll()部分)でNullPointerExceptionが発生してしまいます。
対処法を教えていただきたいです。
発生している問題・エラーメッセージ
2020-04-10 15:24:24.937 INFO 14544 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-04-10 15:24:24.942 INFO 14544 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-04-10 15:24:24.952 INFO 14544 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 10 ms
2020-04-10 15:24:34.999 ERROR 14544 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[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: null
at com.example.MyApp2.service.searchService.bookFind(searchService.java:25) ~[classes/:na]
at com.example.MyApp2.controller.testController.searchExec(testController.java:48) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at
該当のソースコード
java
<searchService.java> package com.example.MyApp2.service; import java.util.List; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.example.MyApp2.entity.tblBook; import com.example.MyApp2.repository.repoBook; @Service @Transactional public class searchService { @Autowired repoBook rps; public List<tblBook> bookFind() { //検索実行 List<tblBook> bkList = rps.findAll(); return bkList; } }
Java
<testController.java> package com.example.MyApp2.controller; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.example.MyApp2.entity.tblBook; import com.example.MyApp2.service.searchService; @Controller public class testController { // //初期表示時 // @RequestMapping("/initShow") public String init(Model model) { model.addAttribute("name","okuda aaaabbbb"); model.addAttribute("mail", "xxxx@yahoo.co.jp"); return "init"; } // //検索実行ボタン押下時 // @RequestMapping(value="/initShow",params="searchBtn" ,method=RequestMethod.POST) public String searchExec(@RequestParam("searchWord") String reqSearchWord,Model model) { model.addAttribute("reqSearchWord", reqSearchWord); //bookModel bkModel = new bookModel(); searchService srv = new searchService(); //検索結果取得する //List<bookModel> bookList = new ArrayList<bookModel>(); List<tblBook> bookList = srv.bookFind(); // List<bookModel> bookList = srv.bookFind(); //画面にリストを返す model.addAttribute("bookList", bookList); return "init"; } }
Java
<tblBook.java エンティティ> package com.example.MyApp2.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Entity @Data @Table(name="t_mybook") public class tblBook implements Serializable{ private static final long serialVersionUID = 1L; //ID @Id private Integer id; @Column(name="bookname") private String bookname; }
Java
<repoBook.java リポジトリ> package com.example.MyApp2.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.example.MyApp2.entity.tblBook; // //リポジトリ // @Repository public interface repoBook extends JpaRepository<tblBook,Integer>{ }
Java
<MyApp2Application.java> package com.example.MyApp2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan public class MyApp2Application { public static void main(String[] args) { SpringApplication.run(MyApp2Application.class, args); } }
properties
<application.properties> spring.jpa.database=POSTGRESQL spring.datasource.url=jdbc:postgresql://localhost:5432/mydb spring.datasource.username=postgres spring.datasource.password=iwtawya7 spring.datasource.driver-class-name=org.postgresql.Driver spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
<構成>
試したこと
・@SpringBootApplicationアノテーションを記載しているMyApp2Application.javaに
@ComponentScanアノテーションを追加。→変化なし。
・各パッケージ名を変更
変更前:com.example.demo
変更後:com.example.MyApp2
→変化なし。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
まだ回答がついていません
会員登録して回答してみよう