まず検索用のページを作成する。
index.htmlにリンクを追加する。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>本棚</title> </head> <body> <h1>本棚</h1> <p>本棚のリストを表示します。</p> <ul th:each="bs : ${list}"> <li> <a th:href="@{'/bookshelf/' + ${bs.id}}" th:text="${bs.name}"></a> </li> </ul> <form class="center" action="/new-bookshelf" method="post"> 名前: <input class="w100" type="text" name="name" /> <input type="submit" value="追加" /> </form> <h3><a href="/book">本の一覧</a></h3> <h3><a href="/search">本の検索</a></h3> </body> </html>
リンク先に飛ばすためのコントローラーの修正。
@RequestMapping("/search") public ModelAndView search(ModelAndView mav, @RequestParam("keyword") String keyword) { mav.setViewName("search"); return mav; }
テンプレートを作成する。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>本の検索</title> </head> <body> <h1>本の検索</h1> <div> <form action="/search" method="get"> <input type="text" name="keyword" /> <button>検索</button> </form> </div> </body> </html>
コントローラで検索キーワードを受け取れるようにする。
検索キーワードがあった場合は、ダミーの検索結果を返すようにする。
@RequestMapping("/search") public ModelAndView search(ModelAndView mav, @RequestParam(name = "keyword", required = false) String keyword) { mav.setViewName("search"); if (keyword != null) { List<Book> list = rakutenSearch(keyword); mav.addObject("list", list); } return mav; } private List<Book> rakutenSearch(String keyword) { List<Book> list = new ArrayList<>(); Book book = new Book(); book.setTitle("タイトル"); book.setAuthor("著者"); book.setImage("https://cache2-ebookjapan.akamaized.net/contents/thumb/s/G8100172430561.jpg"); list.add(book); return list; }
実際に検索を実行してみる。
@RequestMapping("/search") public ModelAndView search(ModelAndView mav, @RequestParam(name = "keyword", required = false) String keyword) { mav.setViewName("search"); if (keyword != null) { List<Book> list = rakutenSearch(keyword); mav.addObject("list", list); } return mav; } private List<Book> rakutenSearch(String keyword) { String url = makeUrl(keyword); System.out.println(url); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, null, String.class); String body = response.getBody(); System.out.println(body); List<Book> list = new ArrayList<>(); return list; } private String makeUrl(String keyword) { String url = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?" + "format=json" + "&title=" + keyword + "&booksGenreId=001004008" + "&applicationId=1042243293332523296"; return url; }