SpringBootでWebサイトを作る

2022年度システム開発実習

SpringBoot

楽天APIを使った本の検索

投稿日:

まず検索用のページを作成する。

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;
	}

-SpringBoot
-

Copyright© 2022年度システム開発実習 , 2025 All Rights Reserved Powered by STINGER.