SpringBootがどのように動くのか知りたく、AIに簡単なTodoリストのコードを書かせていた。
すると以下のcontrollerクラスの出力をしてきた。
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import com.example.demo.model.Todo;
import java.util.*;
@RestController
@RequestMapping("/todos")
public class TodoController {
private List<Todo> todos = new ArrayList<>();
@GetMapping
public List<Todo> getTodos() {
return todos;
}
@PostMapping
public Todo createTodo(@RequestBody Todo todo) {
todos.add(todo);
return todo;
}
}
コードにある@RestControllerや@PostMappingはアノテーションである。
これは「注釈」という意味で、最初はJavaのコメント機能のうちの一つかと思っていた。しかし、きちんと役割を持った構文とのこと。
今回は上記のコードのアノテーションについて調べてみた。
上記コード内のアノテーション
それぞれ、@RestController、@RequestMapping("/todos")、@GetMapping、@PostMappingの4つのアノテーションが含まれている。
@RestController
- このクラスがREST APIのコントローラーであることを示す
- 戻り値が「HTMLビュー」ではなく「JSON形式のデータ」として返される
- データとして返されることで、以下のような役割分担ができる
- 画面はフロント側(Reactなど)で作る
- Spring Bootはデータだけ提供する(APIサーバー)
もしもアノテーションが @Controllerだった場合、 templateフォルダでビューを探しに行く構成になる。
まとめると、
-
@RestController→ データ(JSON)を返す -
@Controller→ HTMLテンプレート(ビュー)を返す
@RequestMapping("/todos")
- ルート(共通パス)のこと
- このクラス(またはメソッド)は
/todosというURLに対応することを示す - http://localhost:8080/todosにアクセスすると、このコントローラーが実行される
- (この場合
getTodos()が実行される)
- (この場合
@GetMapping
- Webブラウザでページを開く、APIでデータを取得する、という指定
@PostMapping
- POSTリクエストを、このメソッドで処理する、という指定
まとめ
これらのアノテーションを外すと、Spring Bootはどのクラスやメソッドを呼び出せば良いのか分からなくなりエラーになる。
調べていく過程でこの他にもさまざまなアノテーションが存在することがわかったため、引き続き学習を進めていきたい。