Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Spring Frameworkでイチからアプリを作ってみる(2) 渡されたものをそのまま返す

まだ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に渡ってきた引数を詰めておくのもわかる。

以下がわからない。

  1. テンプレートとどこで紐付けているのか
  2. なんでこのメソッドは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のドキュメントを読んでみないとわからない。まあ、テンプレートの仕組みもいくつも見てきたから、そんな別に変わったものではないだろうと思っているけど。