まだtextしか返していないので、HTMLを返せるようにしよう。というわけで、
入門 | Spring MVC で Web コンテンツの提供
を読んでいこう。
といっても、このページに書いてあるのは大した話じゃない。前回作ったRestControllerを普通のコントローラーにして、受け取ったパラメータをそのまま画面に返す様なメソッドを作る。こんな感じ。
@Controller public class HelloWorldController { @GetMapping("/greeting") public String greeting( @RequestParam(name="name", required = false, defaultValue = "World") String name, Model model ){ model.addAttribute("name", name); return "greeting"; } }
とはいえ、よくわからないことはある。
@GetMapping
でこのエンドポイントに対してこのメソッドが紐付くのはわかる。引数に@RequestPram
で何をとるか指定するのもわかる。で、メソッドにorg.springframework.ui.Model
が渡ってくる。パッケージ名にuiと書いてあるのだから、これはView Modelなんだろう。なので、Modelに渡ってきた引数を詰めておくのもわかる。
以下がわからない。
- テンプレートとどこで紐付けているのか
- なんでこのメソッドはStringを返すのか
一方、テンプレートの方は、こんな感じだ
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Serving Web Content</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <boby> <p th:text="|Hello, ${name}!|" /> </boby> </html>
なんとなくわからなくもないけど、htmlタグにネームスペースを書いているので、汎用のテンプレートじゃなくて、HTMLに特化した仕組みなんだろうか。まあ、<p th:text=...
のように書いて、これが<p>...</p>
になるわけだから、何らかのそういうものが必要になりそうだ。また、|
で囲っているのはどういう意味なのか・・・この中がエスケープされるよと言うことなのか・・・。Thymeleafのドキュメントを読んでみないとわからない。まあ、テンプレートの仕組みもいくつも見てきたから、そんな別に変わったものではないだろうと思っているけど。