Spring Bootにおいて、Controllerで全てのリクエストを受け取る方法

はじめに

こんにちは、新卒2年目の岡崎です。

エキサイトホールディングス Advent Calendar 2024の20日目を担当します。

他の記事はこちらから!

qiita.com

今回はSpring Bootにおいて、Controllerで全てのリクエストを受け取る方法を紹介します。

環境

  • gradle
------------------------------------------------------------
Gradle 8.11.1
------------------------------------------------------------

Build time:    2024-11-20 16:56:46 UTC
Revision:      481cb05a490e0ef9f8620f7873b83bd8a72e7c39

Kotlin:        2.0.20
Groovy:        3.0.22
Ant:           Apache Ant(TM) version 1.10.14 compiled on August 16 2023
Launcher JVM:  21.0.5 (Amazon.com Inc. 21.0.5+11-LTS)
Daemon JVM:    /Users/hiromi.okazaki/.sdkman/candidates/java/21.0.5-amzn (no JDK specified, using current Java home)
OS:            Mac OS X 14.7.1 aarch64
openjdk version "21.0.5" 2024-10-15 LTS
OpenJDK Runtime Environment Corretto-21.0.5.11.1 (build 21.0.5+11-LTS)
OpenJDK 64-Bit Server VM Corretto-21.0.5.11.1 (build 21.0.5+11-LTS, mixed mode, sharing)
  • Spring Boot
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.3.0)

実装

Spring Bootで全てのリクエストをControllerで受けとる場合、パスを/**とすれば実現できます。

    @RequestMapping("/**")
    public String getAllRequest() {
        return "hello world";
    }

@RequestMappingを使用すると、GETとPOSTの区別をつけず、リクエストを受け取ることができます。

また、GETのみ全てのリクエストを受け取りたい場合は、@GetMapping("/**")、POSTのみ全てのリクエストを受け取りたい場合は@PostMapping("/**")とすればそれぞれのリクエストを受け取ることができます。

特定のエンドポイントが存在する場合

特定のエンドポイントが存在する場合は、/**ワイルドカード指定)よりも優先されます。

例えば、/sampleというエンドポイントが定義されている場合、リクエストは/**ではなく /sampleにルーティングされます。

最後に

本日はSpring Bootにおいて、Controllerで全てのリクエストを受け取る方法を紹介しました。どなたかの助けになれば幸いです。