まず検索用のページを作成する。
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;
}