Google App Engine Java Standard環境に Spring Bootのテンプレートエンジン Thymeleafを適用

Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する

の構成を成長させて、必要な道具をそろえていく。

この書籍によると、テンプレートエンジンとしては、Thymelear(タイムリーフ)がおすすめとのこと。この書籍にもあるように、「JSPでいいんじゃないの?」とも思ったが、ここは素直に従う。

利用するには、pom.xmlに以下を追記。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

1.テンプレートHTMLの配置

src/main/resources/templates 配下に、テンプレート index.html を配置

gae_spring_template_engine01

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	ID:<p class="msg" th:text="${id}"></p>
</body>
</html>

2.コントローラー

コントローラーを記述

前回は、@RestController としたが、テンプレートエンジンを利用する場合、@Controller を利用するようだ。

とりあえず、アプリケーションからコントローラーを分離し、以下のような構成にしてみる。

api  : RestController

page : Controller

gae_spring_template_engine05

2.1 Page用コントローラー

HTMLページ用のコントローラー

  • パスパラメータのマッピング
  • テンプレート名を文字列で返す。
  • パラメータに、ModelAndViewを利用することもできる

など。

package info.typea.page;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class PageController {
	
	@RequestMapping("/page/{id}")
	public String pageSample(
			@PathVariable String id,
			Model model) {
	
		model.addAttribute("id", id);
		return "index";
	}
}

2.2.Api用コントローラー

最終的には、JavaScriptから、REST APIを呼び出す構成にすると思うので、分割動作確認。

package info.typea.api;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {
	@GetMapping("/api/hello")
	public String hello() {
		return "Hello GAE Java std env with Spring boot !";
	}
}

3.動作確認

ローカルで動かす。OK

gae_spring_template_engine02

GAEにデプロイし、動作確認OK!

gae_spring_template_engine03

API側も確認OK

gae_spring_template_engine04