Spring Bootの@RestControllerとは?Webアプリケーションを学んだ新人エンジニア向けにAPIをやさしく解説
こんにちは。ゆうせいです。
今回は、Spring Bootの@RestControllerとは何かを、Webアプリケーションを学んだ新人エンジニア向けに解説します。
すでに@Controller、Thymeleaf、HTMLフォーム、Model、Service、DAOあたりを学んだ人にとって、@RestControllerは少し不思議に見えるかもしれません。
なぜなら、@Controllerではreturn "users/list";のようにHTML画面を返していたのに、@RestControllerではreturn user;のようにJavaオブジェクトをそのまま返すからです。
最初に結論を言うと、@RestControllerは「画面ではなく、データを返すController」です。
Spring公式のAPIドキュメントでも、@RestControllerは@Controllerと@ResponseBodyが付いた便利なアノテーションであり、@RequestMappingメソッドはデフォルトで@ResponseBodyの動作になると説明されています。
WebアプリケーションとAPIの違い
まず、普通のWebアプリケーションとAPIの違いから整理しましょう。
| 種類 | 主な返すもの | 利用者 | Spring Bootでよく使うもの |
|---|---|---|---|
| Webアプリケーション | HTML画面 | 人間、ブラウザ | @Controller |
| API | JSONなどのデータ | JavaScript、スマホアプリ、別システム | @RestController |
Webアプリケーションは、人間が見る画面を返します。
たとえば、ユーザー一覧画面、商品詳細画面、ログイン画面などです。
一方、APIは画面ではなくデータを返します。
たとえば、次のようなJSONです。
{
"userId": 1,
"name": "山田太郎",
"email": "yamada@example.com"
}JSONとは、JavaScript Object Notationの略です。
データをやり取りするための軽い形式だと考えてください。
高校生にもわかるようにたとえるなら、Webアプリケーションは「料理された定食」を出す食堂です。
APIは「材料だけをきれいにパックして渡す食品倉庫」です。
人間がそのまま食べるなら定食、別の料理人が加工するなら材料パックが便利ですよね。
ブラウザで人間が見るならHTML。
JavaScriptやスマホアプリが使うならJSON。
この違いがとても大切です。
@Controllerの復習
まず、@Controllerの例を見てみましょう。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserPageController {
@GetMapping("/users/page")
public String showUserPage(Model model) {
model.addAttribute("name", "山田太郎");
return "users/detail";
}
}このControllerは、Thymeleafのテンプレートを返します。
return "users/detail";は、次のファイルを表示するという意味です。
src/main/resources/templates/users/detail.html
つまり、@Controllerは主にHTML画面を返すときに使います。
画面を作るためにModelへデータを入れ、ThymeleafでHTMLを組み立てます。
@RestControllerの基本
次に、@RestControllerの例を見てみましょう。
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users/message")
public String message() {
return "ユーザーAPIです";
}
}この場合、return "ユーザーAPIです";はテンプレート名ではありません。
その文字列が、そのままHTTPレスポンスの中身として返されます。
ブラウザで/api/users/messageへアクセスすると、画面テンプレートではなく、次の文字がそのまま表示されます。
ユーザーAPIです
@RestControllerでは、戻り値が「ビュー名」ではなく「レスポンス本文」になります。
ここが@Controllerとの最大の違いです。
@Controllerと@RestControllerの違い
| 比較 | @Controller | @RestController |
|---|---|---|
| 主な目的 | HTML画面を返す | JSONや文字列などのデータを返す |
| 戻り値の意味 | テンプレート名 | レスポンス本文 |
| よく使う相手 | Thymeleaf | JavaScript、スマホアプリ、外部システム |
| 代表例 | return "users/list"; | return userDto; |
同じreturnでも意味が違います。
@Controllerでreturn "users/list";と書くと、users/list.htmlを探します。
@RestControllerでreturn "users/list";と書くと、文字列のusers/listをそのまま返します。
たとえるなら、@Controllerは「このページを表示してください」と案内する受付です。
@RestControllerは「このデータをそのまま渡してください」と返す受付です。
@ResponseBodyとは何か
@RestControllerを理解するには、@ResponseBodyも知っておくとよいです。
@ResponseBodyは、「戻り値をレスポンス本文として返す」という意味です。
Spring Frameworkのドキュメントでは、@ResponseBodyを使うと、戻り値がメッセージコンバーターを通じてレスポンス本文に書き込まれると説明されています。
@ControllerでAPIのようにデータを返したい場合は、次のように書けます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class SampleController {
@GetMapping("/api/sample")
@ResponseBody
public String sample() {
return "サンプルAPIです";
}
}
このコードは、次の@RestController版とほぼ同じ意味になります。
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SampleRestController {
@GetMapping("/api/sample")
public String sample() {
return "サンプルAPIです";
}
}つまり、@RestControllerは、ざっくり言えば次の省略形です。
@Controller @ResponseBody
毎回@ResponseBodyを書くのは面倒なので、API専用のControllerでは@RestControllerを使います。
APIとは何か
APIとは、Application Programming Interfaceの略です。
日本語にすると、「アプリケーション同士がやり取りするための窓口」です。
Webアプリケーションを学んだばかりの人は、最初は「画面がないWeb機能」と考えるとわかりやすいです。
たとえば、普通のWeb画面なら、人間がボタンを押してユーザー一覧を見ます。
APIなら、JavaScriptやスマホアプリがURLへアクセスして、ユーザー一覧のJSONを受け取ります。
| 例 | アクセスする人・もの | 返ってくるもの |
|---|---|---|
| /users/list | 人間がブラウザで見る | HTML画面 |
| /api/users | JavaScriptやスマホアプリが使う | JSONデータ |
APIは、システム同士の会話窓口です。
人間に見せるためではなく、別のプログラムが使うための入口だと考えてください。
REST APIとは何か
@RestControllerのRestは、RESTという考え方に由来します。
RESTは、Web上でリソースを扱うための設計スタイルです。
Spring公式のRESTチュートリアルでも、RESTは標準そのものではなく、Webスケールのシステムを作るためのアーキテクチャ上のスタイルや制約の集合だと説明されています。
新人エンジニア向けには、まず次のように考えれば十分です。
URLで対象を表す
HTTPメソッドで操作を表す
JSONでデータをやり取りする
たとえば、ユーザー情報を扱うAPIなら次のようになります。
| HTTPメソッド | URL | 意味 |
|---|---|---|
| GET | /api/users | ユーザー一覧を取得する |
| GET | /api/users/1 | IDが1のユーザーを取得する |
| POST | /api/users | ユーザーを新規登録する |
| PUT | /api/users/1 | IDが1のユーザーを更新する |
| DELETE | /api/users/1 | IDが1のユーザーを削除する |
URLは「何を」、HTTPメソッドは「どうする」を表します。
文法でたとえるなら、URLが名詞、HTTPメソッドが動詞です。
/api/usersという名詞に対して、GETなら取得、POSTなら作成、DELETEなら削除です。
簡単なJSONを返すサンプル
まず、ユーザー情報をJSONで返す簡単なAPIを作ってみましょう。
DTOを用意します。
package com.example.demo.dto;
public class UserDto {
private int userId;
private String name;
private String email;
public UserDto() {
}
public UserDto(int userId, String name, String email) {
this.userId = userId;
this.name = name;
this.email = email;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}次に、@RestControllerを作ります。
package com.example.demo.controller;
import com.example.demo.dto.UserDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users/1")
public UserDto findUser() {
UserDto user = new UserDto(
1,
"山田太郎",
"yamada@example.com"
);
return user;
}
}このAPIへアクセスすると、次のようなJSONが返ります。
{
"userId": 1,
"name": "山田太郎",
"email": "yamada@example.com"
}ここで重要なのは、UserDtoをreturnしている点です。
@RestControllerでは、Javaオブジェクトを返すと、SpringがJSONに変換してレスポンスとして返してくれます。
Springの@ResponseBodyの説明では、レスポンス本文への変換はメッセージコンバーターによって行われると説明されています。
なぜDTOを返すのか
APIでは、Entityをそのまま返すより、DTOを返すことが多いです。
DTOとは、Data Transfer Objectの略です。
データを運ぶためのクラスです。
たとえば、UserEntityにpasswordHashが入っていたとします。
public class UserEntity {
private int userId;
private String name;
private String email;
private String passwordHash;
}このEntityをそのままAPIで返すと、passwordHashまでJSONに含まれてしまう危険があります。
そこで、APIで返したい項目だけを持つUserDtoを作ります。
public class UserDto {
private int userId;
private String name;
private String email;
}| クラス | 役割 | APIで返すか |
|---|---|---|
| Entity | DBテーブルに近いクラス | 直接返すと注意が必要 |
| DTO | 外部に渡すデータを整理したクラス | 返しやすい |
APIは外部にデータを渡す窓口です。
そのため、「外に出してよいデータだけを返す」意識が大切です。
一覧を返すAPI
次に、ユーザー一覧を返すAPIを見てみましょう。
package com.example.demo.controller;
import com.example.demo.dto.UserDto;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users")
public List<UserDto> findAllUsers() {
List<UserDto> userList = new ArrayList<>();
userList.add(new UserDto(1, "山田太郎", "yamada@example.com"));
userList.add(new UserDto(2, "鈴木花子", "suzuki@example.com"));
userList.add(new UserDto(3, "佐藤一郎", "sato@example.com"));
return userList;
}
}返ってくるJSONのイメージです。
[
{
"userId": 1,
"name": "山田太郎",
"email": "yamada@example.com"
},
{
"userId": 2,
"name": "鈴木花子",
"email": "suzuki@example.com"
},
{
"userId": 3,
"name": "佐藤一郎",
"email": "sato@example.com"
}
]JavaのListを返すと、JSONの配列になります。
JavaオブジェクトはJSONオブジェクト。
JavaのListはJSON配列。
この対応を覚えておくと、APIの戻り値が理解しやすくなります。
| Java | JSON |
|---|---|
| UserDto | { "userId": 1, "name": "山田太郎" } |
| List<UserDto> | [ { ... }, { ... } ] |
@PathVariableでURLの一部を受け取る
APIでは、URLの一部を値として受け取ることがよくあります。
たとえば、/api/users/1の1を受け取る場合です。
package com.example.demo.controller;
import com.example.demo.dto.UserDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users/{userId}")
public UserDto findUserById(@PathVariable int userId) {
return new UserDto(
userId,
"山田太郎",
"yamada@example.com"
);
}
}@PathVariableは、URLの中の値をJavaの引数に入れるためのアノテーションです。
| アクセスURL | userIdに入る値 |
|---|---|
| /api/users/1 | 1 |
| /api/users/10 | 10 |
| /api/users/999 | 999 |
URLの中にある値を取り出す、と考えてください。
マンションの住所でたとえるなら、/api/users/1は「ユーザーマンションの1号室」です。
@PathVariableは、その1号室という番号を取り出します。
@RequestParamで検索条件を受け取る
検索APIでは、クエリパラメータを使うことがあります。
たとえば、次のURLです。
/api/users/search?keyword=山田
keyword=山田を受け取るには、@RequestParamを使います。
package com.example.demo.controller;
import com.example.demo.dto.UserDto;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users/search")
public List<UserDto> searchUsers(
@RequestParam String keyword) {
List<UserDto> userList = new ArrayList<>();
userList.add(new UserDto(1, keyword + "太郎", "sample@example.com"));
return userList;
}
}| 使い方 | 向いている場面 |
|---|---|
| @PathVariable | 特定の1件を指定するID |
| @RequestParam | 検索条件、ページ番号、並び順 |
/api/users/1のように「1件を指定する」なら@PathVariable。
/api/users/search?keyword=山田のように「条件を付ける」なら@RequestParam。
まずはこの使い分けを覚えましょう。
@RequestBodyでJSONを受け取る
APIでは、ブラウザやJavaScriptからJSONを送ってもらうことがあります。
たとえば、ユーザー登録APIです。
送られてくるJSONの例です。
{
"name": "山田太郎",
"email": "yamada@example.com"
}このJSONをJavaで受け取るために、Request DTOを作ります。
package com.example.demo.dto;
public class UserCreateRequest {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}Controllerでは@RequestBodyを使います。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@PostMapping("/api/users")
public UserDto createUser(@RequestBody UserCreateRequest request) {
UserDto createdUser = new UserDto(
1,
request.getName(),
request.getEmail()
);
return createdUser;
}
}@RequestBodyは、リクエストの本文に入っているJSONをJavaオブジェクトへ変換します。
フォーム送信で使う@RequestParamとは違います。
| アノテーション | 受け取るもの | 例 |
|---|---|---|
| @RequestParam | URLパラメータやフォーム値 | ?keyword=山田 |
| @PathVariable | URLの一部 | /api/users/1 |
| @RequestBody | リクエスト本文のJSON | { "name": "山田太郎" } |
HTMLフォームの世界では、name属性で値を送っていました。
APIの世界では、JSONというまとまったデータを送ることが増えます。
そのJSONを受け取る入口が@RequestBodyです。
ResponseEntityでHTTPステータスも返す
@RestControllerでは、データだけでなくHTTPステータスも意識する必要があります。
HTTPステータスとは、リクエスト結果を表す数字です。
| ステータス | 意味 | よく使う場面 |
|---|---|---|
| 200 OK | 成功 | 取得成功、更新成功 |
| 201 Created | 作成成功 | 新規登録成功 |
| 400 Bad Request | リクエスト不正 | 入力値が不正 |
| 404 Not Found | 見つからない | IDのデータが存在しない |
| 500 Internal Server Error | サーバー内部エラー | 想定外のエラー |
新規作成APIでは、201 Createdを返すとよりAPIらしくなります。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@PostMapping("/api/users")
public ResponseEntity<UserDto> createUser(
@RequestBody UserCreateRequest request) {
UserDto createdUser = new UserDto(
1,
request.getName(),
request.getEmail()
);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(createdUser);
}
}ResponseEntityは、レスポンス本文だけでなく、HTTPステータスも細かく指定したいときに使います。
Web画面では「登録完了画面に遷移すれば成功」と考えがちです。
APIでは、呼び出し元のプログラムが判断できるように、ステータスコードで結果を伝える必要があります。
JavaScriptからAPIを呼ぶイメージ
APIは、JavaScriptから呼び出すことも多いです。
たとえば、ユーザー一覧APIをfetchで呼ぶ例です。
fetch("/api/users")
.then(function (response) {
return response.json();
})
.then(function (userList) {
console.log(userList);
})
.catch(function (error) {
console.error("API呼び出しでエラーが発生しました。", error);
});/api/usersがJSONを返します。
JavaScript側はresponse.json()でJSONをJavaScriptのオブジェクトに変換します。
つまり、@RestControllerは、JavaScriptとSpring Bootをつなぐ窓口としてよく使われます。
| 役割 | 担当 |
|---|---|
| 画面の操作 | JavaScript |
| データの取得や登録 | Spring Bootの@RestController |
| データ保存 | Service、DAO、DB |
@RestControllerでよく使うアノテーション
| アノテーション | 意味 | 例 |
|---|---|---|
| @RestController | API用Controllerにする | JSONを返す |
| @GetMapping | GETリクエストを受け取る | 一覧取得、詳細取得 |
| @PostMapping | POSTリクエストを受け取る | 新規登録 |
| @PutMapping | PUTリクエストを受け取る | 更新 |
| @DeleteMapping | DELETEリクエストを受け取る | 削除 |
| @PathVariable | URLの一部を受け取る | /api/users/{userId} |
| @RequestParam | クエリパラメータを受け取る | ?keyword=山田 |
| @RequestBody | JSON本文を受け取る | 登録リクエスト |
@RestControllerを学ぶときは、まず@GetMapping、@PostMapping、@PathVariable、@RequestParam、@RequestBodyをセットで覚えるとよいです。
CRUD APIのサンプル
CRUDとは、Create、Read、Update、Deleteの略です。
日本語では、作成、読み取り、更新、削除です。
APIの基本操作は、このCRUDで考えると整理しやすいです。
package com.example.demo.controller;
import com.example.demo.dto.UserCreateRequest;
import com.example.demo.dto.UserDto;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@GetMapping("/api/users")
public List<UserDto> findAll() {
List<UserDto> users = new ArrayList<>();
users.add(new UserDto(1, "山田太郎", "yamada@example.com"));
users.add(new UserDto(2, "鈴木花子", "suzuki@example.com"));
return users;
}
@GetMapping("/api/users/{userId}")
public UserDto findById(@PathVariable int userId) {
return new UserDto(
userId,
"山田太郎",
"yamada@example.com"
);
}
@PostMapping("/api/users")
public ResponseEntity<UserDto> create(
@RequestBody UserCreateRequest request) {
UserDto createdUser = new UserDto(
3,
request.getName(),
request.getEmail()
);
return ResponseEntity
.status(HttpStatus.CREATED)
.body(createdUser);
}
@PutMapping("/api/users/{userId}")
public UserDto update(
@PathVariable int userId,
@RequestBody UserCreateRequest request) {
return new UserDto(
userId,
request.getName(),
request.getEmail()
);
}
@DeleteMapping("/api/users/{userId}")
public ResponseEntity<Void> delete(@PathVariable int userId) {
return ResponseEntity.noContent().build();
}
}このサンプルはDBに接続していません。
まずは@RestControllerの動きを理解するための簡単な例です。
実務では、このControllerからServiceを呼び出し、ServiceからDAOやRepositoryを呼び出してDBを操作します。
Webアプリで学んだ構成との対応
Webアプリを学んだ人向けに、HTML画面版とAPI版を対応させます。
| 役割 | HTML画面版 | API版 |
|---|---|---|
| Controller | @Controller | @RestController |
| 返すもの | Thymeleafテンプレート名 | JSONデータ |
| 入力受け取り | @RequestParam、@ModelAttribute | @RequestParam、@PathVariable、@RequestBody |
| 画面表示 | Thymeleaf | JavaScriptやスマホアプリが表示 |
| 成功時 | redirectや完了画面 | 200、201などのHTTPステータス |
| エラー時 | エラー画面 | 400、404、500などのJSON |
Webアプリでは、Spring Bootが画面まで作って返していました。
APIでは、Spring Bootはデータだけ返します。
画面をどう作るかは、JavaScript、React、Vue、スマホアプリなど別の担当に任せることが多いです。
@RestControllerで注意すること
HTMLテンプレート名を返したいなら使わない
@RestControllerで次のように書いても、users/list.htmlは表示されません。
@RestController
public class UserApiController {
@GetMapping("/users")
public String users() {
return "users/list";
}
}この場合、ブラウザには文字列としてusers/listが表示されます。
HTML画面を表示したいなら@Controllerを使ってください。
Entityをそのまま返しすぎない
APIでは、外に出してよいデータだけを返す必要があります。
passwordHash、内部メモ、削除フラグ、管理者用情報などを誤って返さないようにしましょう。
DTOを作り、返す項目を制限してください。
HTTPステータスを意識する
APIでは、データだけでなくHTTPステータスも重要です。
登録成功なら201。
データなしなら404。
入力不正なら400。
想定外のエラーなら500。
このように、呼び出し元が判断しやすい返し方にします。
例外処理を共通化する
APIでは、例外が起きたときのJSON形式をそろえると扱いやすくなります。
@RestControllerAdviceを使うと、API用の例外処理を共通化できます。
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity
.status(500)
.body("サーバー内部でエラーが発生しました。");
}
}エラーの形式がバラバラだと、JavaScript側やスマホアプリ側が困ります。
APIでは、成功レスポンスだけでなく、エラーレスポンスの形も設計しましょう。
@RestControllerを使う場面
| 場面 | @RestControllerが向いているか | 理由 |
|---|---|---|
| ThymeleafでHTML画面を表示する | 向いていない | @Controllerのほうが自然 |
| JavaScriptからデータを取得する | 向いている | JSONを返しやすい |
| スマホアプリにデータを渡す | 向いている | 画面ではなくデータが必要だから |
| 外部システムと連携する | 向いている | HTTPとJSONでやり取りしやすい |
| ReactやVueのバックエンドを作る | 向いている | フロントエンドとAPIで分離できる |
新人エンジニアは、まず「HTMLを返すなら@Controller、JSONを返すなら@RestController」と覚えてください。
もちろん、細かい例外はあります。
しかし、最初の理解としてはこの分け方で十分です。
Postmanやcurlで確認する
APIはブラウザで見るだけでなく、Postmanやcurlで確認することが多いです。
curlの例です。
curl http://localhost:8080/api/users
POSTでJSONを送る例です。
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d "{\"name\":\"山田太郎\",\"email\":\"yamada@example.com\"}"
APIは画面がないため、最初は確認しづらく感じます。
しかし、Postmanやcurlを使うと、リクエストとレスポンスを直接確認できます。
これは、Webアプリでブラウザ画面を確認するのと同じくらい重要です。
まとめ
@RestControllerは、Spring BootでAPIを作るためによく使うアノテーションです。
@ControllerがHTML画面を返すのに対して、@RestControllerはJSONや文字列などのデータを返します。
| ポイント | 内容 |
|---|---|
| @RestController | API用Controllerを作る |
| @Controllerとの違い | テンプレート名ではなくレスポンス本文を返す |
| JSON | APIでよく使うデータ形式 |
| @PathVariable | URLの一部を受け取る |
| @RequestParam | クエリパラメータを受け取る |
| @RequestBody | JSON本文をJavaオブジェクトとして受け取る |
| ResponseEntity | HTTPステータスとレスポンス本文を返す |
一言でまとめるなら、@RestControllerは「画面ではなくデータを返すController」です。
Webアプリケーションを学んだ新人エンジニアは、次の対応関係を覚えてください。
HTML画面を返す
↓
@Controller
↓
Thymeleaf
JSONデータを返す
↓
@RestController
↓
API
APIを理解すると、Spring Bootはブラウザ画面だけでなく、JavaScript、スマホアプリ、外部システムともつながるようになります。
今後の学習では、@GetMapping、@PostMapping、@PathVariable、@RequestParam、@RequestBody、ResponseEntity、DTO、HTTPステータス、JSON、@RestControllerAdviceを順番に学ぶとよいです。まずは小さなUser APIを作り、ブラウザ、Postman、curlでレスポンスを確認してみましょう!
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
新人エンジニア研修講師2026年6月18日JavaのOptionalでnullを安全に扱う方法|NullPointerExceptionを防ぎ、DAOの戻り値をわかりやすくする
新人エンジニア研修講師2026年6月18日ローカルSMTPを使って問い合わせ完了メールを送る方法|新人エンジニア研修向けにSpring BootとJavaMailSenderを解説
新人エンジニア研修講師2026年6月18日DevToolsでHTTP通信・エラー・DOMを確認する方法|新人エンジニア向けにブラウザ開発者ツールを解説
新人エンジニア研修講師2026年6月18日Spring Bootの@RestControllerとは?Webアプリケーションを学んだ新人エンジニア向けにAPIをやさしく解説
