カテゴリ: Spring 更新日: 2025/09/23

Spring MVCのViewResolver設定とThymeleafの連携方法とよくあるエラーの解決

Spring MVCのViewResolver設定:Thymeleaf連携とよくあるエラー
Spring MVCのViewResolver設定:Thymeleaf連携とよくあるエラー

先生と生徒の会話形式で理解しよう

生徒

「Spring MVCでThymeleafを使って画面表示しようとしたんですが、うまく表示されなくて困っています…」

先生

「なるほど。Spring MVCとThymeleafを連携させるには、ViewResolverの設定が重要なポイントになりますよ。」

生徒

「ViewResolverって何ですか?設定が必要なんですか?」

先生

「はい、ViewResolverの設定次第で、HTMLファイルが正しく解釈されないこともあるんです。今回は設定方法と、初心者がハマりやすいエラーの原因と対策も丁寧に解説していきましょう。」

1. Spring MVCにおけるViewResolverとは?

1. Spring MVCにおけるViewResolverとは?
1. Spring MVCにおけるViewResolverとは?

Spring MVCでは、コントローラーが返すView名(例えば"index"など)をもとに、実際に表示するHTMLテンプレートを探す仕組みが必要です。この役割を担うのがViewResolverです。Thymeleafを使う場合、このViewResolverをThymeleaf用に設定する必要があります。

例えば、コントローラーで次のように書くとします:


@GetMapping("/hello")
public String helloPage(Model model) {
    model.addAttribute("message", "こんにちは、Thymeleaf!");
    return "hello";
}

この場合、Springは「hello.html」というテンプレートファイルを探しますが、どのディレクトリにあるか、どうやってレンダリングするかはViewResolverが決めています。

2. Spring BootでのThymeleaf設定方法

2. Spring BootでのThymeleaf設定方法
2. Spring BootでのThymeleaf設定方法

Spring Bootを使っている場合は、実はThymeleafのViewResolverは自動的に設定されています。デフォルトでは以下のような設定です:

  • テンプレートのパス:src/main/resources/templates/
  • ファイル拡張子:.html
  • Content-Type:text/html

ですので、例えば「hello.html」を表示したい場合、以下のようなファイルをtemplatesフォルダに置くだけでOKです。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello Page</title>
</head>
<body>
    <h1 th:text="${message}">固定メッセージ</h1>
</body>
</html>

3. application.propertiesに書くThymeleafのViewResolver設定

3. application.propertiesに書くThymeleafのViewResolver設定
3. application.propertiesに書くThymeleafのViewResolver設定

カスタマイズしたい場合は、application.propertiesに以下のような設定を追加できます。


spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false

prefixsuffixを変えれば、別のディレクトリにテンプレートを置くこともできます。cache=falseは開発中にテンプレートの変更がすぐ反映されるようにするための設定です。

4. よくあるエラーとその対策

4. よくあるエラーとその対策
4. よくあるエラーとその対策

ThymeleafとSpring MVCを使っていると、初心者がつまずきやすいエラーがいくつかあります。代表的なものを見てみましょう。

テンプレートが見つからない

コントローラーで返すView名に対して、対応するHTMLが見つからないと次のようなエラーになります:


org.springframework.web.servlet.view.InternalResourceViewResolver: No matching resource found for view name [hello]

これは、HTMLファイルの場所や拡張子が正しくない場合に発生します。設定したprefixsuffixを見直しましょう。

Thymeleafの構文エラー

テンプレート内のth:textth:eachで書き方を間違えると、画面が表示されなかったり、変数が展開されなかったりします。

例:


<!-- NG: スペルミス -->
<p th:tex="${message}">Hello</p>
<!-- OK -->
<p th:text="${message}">Hello</p>

データがnullになる

コントローラー側でモデルに値を入れ忘れると、テンプレートで表示できません。次のようにModelにちゃんとデータを入れましょう。


@GetMapping("/sample")
public String sample(Model model) {
    model.addAttribute("name", "太郎");
    return "sample";
}

5. Spring Bootを使わない場合のViewResolver設定

5. Spring Bootを使わない場合のViewResolver設定
5. Spring Bootを使わない場合のViewResolver設定

Spring Bootを使っていない従来型のSpring MVCでは、Java ConfigやXMLでViewResolverを明示的に設定する必要があります。

Java Configでの設定例:


@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }
}

/WEB-INF/views/というディレクトリ構成にしている点がポイントです。

6. ViewResolver設定をデバッグする方法

6. ViewResolver設定をデバッグする方法
6. ViewResolver設定をデバッグする方法

うまくHTMLが表示されないときは、ログを確認することが大事です。application.propertiesでログレベルをDEBUGに設定して、テンプレートの解決プロセスを見ましょう。


logging.level.org.springframework.web=DEBUG
logging.level.org.thymeleaf=DEBUG

これで、Springがどのテンプレートを探しに行っているかがログに出力され、問題の特定がしやすくなります。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説