0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Bootのアノテーションについて

Posted at

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はどのクラスやメソッドを呼び出せば良いのか分からなくなりエラーになる。

調べていく過程でこの他にもさまざまなアノテーションが存在することがわかったため、引き続き学習を進めていきたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?