Spring Bootのコントローラーでの戻り値の扱いについて解説!
こんにちは。ゆうせいです。
Spring BootでWebアプリケーションを開発するとき、コントローラーのメソッドが返す値(return)の扱いについて理解することはとても重要です。
どのアノテーションを使うかによって、ブラウザに表示される内容が変わるので、しっかりと違いを押さえておきましょう!
1. @RestController を使う場合
@RestController
を使用すると、メソッドの戻り値はそのままHTTPレスポンスの本文(Body)として扱われ、ブラウザに直接表示されます。
例: 文字列を返す
import org.springframework.web.bind.annotation.*;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
アクセス
http://localhost:8080/hello
ブラウザの表示
Hello, Spring Boot!
@RestController
を使うと、戻り値の文字列がそのままブラウザに表示されます。
2. @Controller を使う場合
@Controller
を使うと、メソッドの戻り値は 「ビューの名前」として解釈 されます。そのため、文字列がそのまま表示されるわけではなく、テンプレートファイルが必要になります。
例: ビューの名前を返す
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ViewController {
@GetMapping("/page")
public String showPage() {
return "mypage"; // "mypage.html" を表示しようとする
}
}
アクセス
http://localhost:8080/page
この場合、Spring Bootは mypage.html
というテンプレートファイルを探しに行きます。
3. @ResponseBody を使う場合
@Controller
を使っていても、@ResponseBody
をつけると、戻り値が直接ブラウザに表示されるようになります。
例: @ResponseBody
で文字列を返す
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TextController {
@GetMapping("/text")
@ResponseBody
public String getText() {
return "This is plain text.";
}
}
ブラウザの表示
This is plain text.
@ResponseBody
を使うと、@Controller
でも文字列を直接レスポンスとして返せるようになります。
4. まとめ
コントローラーの種類 | 戻り値の扱い | ブラウザの表示 |
---|---|---|
@RestController | そのままHTTPレスポンスになる | 文字列が表示される |
@Controller | ビュー(HTMLファイル)として解釈される | 文字列は表示されない(テンプレートが必要) |
@Controller + @ResponseBody | そのままHTTPレスポンスになる | 文字列が表示される |
5. 結論
@RestController
を使えば、メソッドのreturn
がそのままブラウザに表示される@Controller
だけだと、ビュー名として解釈されるので注意@ResponseBody
をつければ、@Controller
でも文字列を直接返せる
Spring Bootのコントローラーを使うときは、目的に応じて適切なアノテーションを選びましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
