package jp.gihyo.projava.talklist;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class HomeRestController {
@RequestMapping(value="/resthello")
String hello() {
return """
Hello.
It works!
現在時刻は%sです。
""".formatted(LocalDateTime.now());
}
}
@RequestMappingについてまとめる前に、前提知識の復習をしましょう。
以下のサイトがとても分かりやすいです。
超絶初心者のためのサーバとクライアントの話 - Qiita
さて本題に戻りましょう。
ここで行うのは、「クライアントからのリクエストに応えるためのエンドポイントを作る」ことです。
先程のサイトからの情報で言い換えると、
「WebブラウザからWebサーバへ"このページを見せてくれ"的な要求に応えるための、Webブラウザとの窓口となるメソッドを作る」ということです。
それを実現するため(クライアントからのリクエストを処理するため)のアノテーションが@RequestMappingとなります。
つまり@RequestMapping内のメソッドは、
「クライアントからなんらかのリクエストが送られてきた」場合に呼び出されるメソッドになります。
今回の場合だとhelloメソッドが該当します。
また、送られてきたリクエストをどこで処理するのかの対象をURLで@RequestMappingの()内で指定します。
指定する属性を「value 属性」と呼び、「value=」の部分を省略することが可能です。
(例)http://www.example.com/resthelloに対して送られたのならば"/resthello"に対応したメソッドが呼び出されます。
これらを踏まえて流れをまとめると、以下の流れになります。
@RestControllerでこのクラスはコントローラと判断がされている状態
(UIから送られてくるリクエストを処理する部分)
↓
クライアント(Webブラウザ)が「http://www.example.com/resthello」にアクセス
(リクエストがされた)
↓
@RequestMapping内のhelloメソッドが動き、現在時刻を含んだ文字列をクライアントに返す
先に記載するべきでしたが、@RequestMappingは、コントローラ内に付与します。
また今回は、helloメソッド1つだけの用意でしたが、1つのコントローラに対応するURLを複数指定することや、パラメータの異なる複数のエンドポイントを用意することも出来ます。
最後に、ここまでコードが記載出来たらプロジェクトを実行します。
アプリケーションが正しく起動出来たら、Webブラウザで対象のページへアクセスします。
文字列と現在の時刻が表示されていれば成功になります。