ModelAndView? return “html”?どっちを使う?

Java_Spring_サムネイル画像
記述方法

Spring Boot で Thymeleaf などのテンプレートエンジンを使う場合

  • ModelAndView を使う方法
  • return "テンプレート名" で返す方法

2つの記述方法 があります。

✅ どちらが新しいか?

Spring Boot では、return "テンプレート名" のほうが新しく、推奨される記法 です。
理由は、コードがシンプルで可読性が高い ためです。

Spring Framework(Spring MVC)の 古いバージョンでは ModelAndView が一般的 でしたが、
Spring Boot では @Controller@RequestMapping@GetMapping / @PostMapping)を使うのが主流になっています。

✅ どちらがベスト?

return "テンプレート名" を使う方法(推奨)

これは、Spring Boot で一般的な書き方 です。

@Controller
@RequestMapping("/example")
public class ExampleController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Thymeleaf!");
        return "hello"; // `src/main/resources/templates/hello.html` が表示される
    }
}
Java

  • メリット
    • シンプルで直感的(コードが短い)
    • Spring Boot の標準的な書き方
    • 可読性が高い
    • Model を使ってデータをテンプレートに渡せる
  • デメリット
    • リダイレクトをするときは redirect:/path を手動で書く必要がある

ModelAndView を使う方法(古いが場合によっては有用)

ModelAndViewSpring MVC の古いスタイル ですが、
以下のように ビュー名とデータをまとめて管理できる というメリットがあります。

@Controller
@RequestMapping("/example")
public class ExampleController {

    @GetMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mav = new ModelAndView("hello"); // `hello.html` を表示
        mav.addObject("message", "Hello, Thymeleaf!");
        return mav;
    }
}
Java

  • メリット
    • ビュー名とデータを1つのオブジェクトにまとめられる
    • リダイレクト時も mav.setViewName("redirect:/path") で統一できる
    • Interceptor などと組み合わせると便利
  • デメリット
    • コードが長くなる
    • Spring Boot ではあまり使われない
    • ModelAndView を明示的に new する必要があるため、冗長になりやすい

✅ どちらを使うべきか?

方法おすすめ度使いやすさ主な用途
return "テンプレート名"Model を使用)⭐⭐⭐⭐(推奨)シンプル一般的な Spring Boot アプリ
ModelAndView を使用⭐⭐(古い)冗長になりやすい既存の Spring MVC アプリ、Interceptor との組み合わせ

基本的には return "テンプレート名" を使うのがベスト!
どうしても ModelAndView が必要なケース以外は、新しい記法を使うのが良い