【SpringBoot】レスポンスで返すHTTPステータスコードを設定できる@ResponseStatusアノテーションを解説します

Java

こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。

この記事では、 SpringBootでレスポンスで返すHTTPステータスコードを設定できる@ResponseStatusアノテーションについて

  • @ResponseStatusアノテーションとは
  • @ResponseStatusアノテーションを使ったサンプルプログラム

と、丁寧に解説していきます。

前提:実施している環境

この記事では、以下の環境で行っています。

OS Windows10
IntelliJ IDEAのエディション Community(無料版)
IntelliJ IDEAのバージョン 2021.3.2
プロジェクト Gradle Project
言語 Java バージョン11
フレームワーク Spring Boot バージョン2.6.3

Spring Bootを動かすためにIntelliJ IDEAを使っています。
IntelliJ IDEAのインストールとSpring Bootプロジェクトを新規作成するやり方はこちらの記事をご参考ください。

この記事では

C:\SpringBootSample

配下に「SpringSample」という名前のプロジェクトを作っています。
SpringBootの@PostMappingアノテーションを解説

@ResponseStatusアノテーションとは

@ResponseStatusアノテーションとは、レスポンスで返すHTTPステータスコードを設定できるアノテーションです。

@ResponseStatusアノテーションを使うためには

をインポートする必要があります。

@ResponseStatusアノテーションの基本の使い方サンプルは以下になります。

このサンプルでは、【http://localhost:8080/sample】でGETリクエストを投げた場合、HTTPステータスコードが400で

というレスポンスが返されます。

@GetMappingアノテーションは、GETリクエストをマッピングするアノテーションです。
詳しくはこちらの記事をご参考ください。

@ResponseStatusアノテーションで指定できる属性の

  • code属性、value属性
  • reason属性

について、それぞれ詳しく解説します。
※code属性、value属性は同じ機能を持っているので一緒に解説します。

@ResponseStatusアノテーションの属性:code属性、value属性

@ResponseStatusアノテーションの属性のcode属性value属性は、常に返すHTTPステータスコードを指定する属性です。
指定できるHTTPステータスコードについては、こちらの記事をご参考ください。

どちらを使っても同じ効果を得ることができます。
片方だけを使っても良いですし、両方使っても問題ありません。

このサンプルでは、【http://localhost:8080/test】でGETリクエストを投げた場合、HTTPステータスコードが200で

というレスポンスが返されます。

code属性、value属性両方を使う場合に注意点があります。
それは、設定する値は必ず同じものを使う必要がある、という点です。

たとえば

だとコンパイルは通るものの実行した場合

という例外が発生します。

@ResponseStatusアノテーションの属性:reason属性

@ResponseStatusアノテーションの属性のreason属性は、レスポンスのエラーメッセージを指定する属性です。
デフォルトは空です。

reason属性を使う場合に注意点があります。
それはreason属性を設定していると、HttpServletResponse.sendErrorメソッドが呼ばれて指定した処理が行われない、という点です。

たとえば

に対して【http://localhost:8080/test】でGETリクエストを投げた場合、HTTPステータスコードが400でレスポンスが

と、メソッド内で指定したレスポンスではなくエラーのレスポンスが返されます。
画面では
SpringBootの@ResponseStatusアノテーションを解説
と表示されます。

reason属性は使用用途によって向き不向きがあるので、使う場合はご注意ください。
基本使わないでどうしてもという場合使う、というスタンスで問題ありません。

では、次の章で実際に使ってみます。

@ResponseStatusアノテーションを解説するプログラムの概要

@ResponseStatusアノテーションを解説するプログラムでは、

  • 全属性を指定したメソッド
  • code属性のみを指定したメソッド

と、合計2つ作成します。
それぞれリクエストを投げてレスポンスを確認します。

解説で使うJavaプログラムは、

SpringSample\src\main\java\com\example\SpringSample

配下にある【SpringSampleApplication.java】を使います。
SpringBootの@ResponseStatusアノテーションを解説

Javaサンプルプログラム

実行結果

プロジェクトを実行するやり方は

  • プログラムを右クリックして実行
  • 実行タブから実行
  • ガターから実行

の3種類あるので、いずれかで実行します。
詳しい解説は以下の記事をご参考ください。

今回、確認するにあたりPostmanというツールを使います。
Postmanの基本的な使い方については、こちらの記事をご参考ください。

まず、「全属性を指定したメソッド」のレスポンスを確認します。
【http://localhost:8080/test】のURL、かつGETでリクエストを投げると、HTTPステータスが400でレスポンスが

SpringBootの@ResponseStatusアノテーションを解説
が返されているので、指定した内容のエラーレスポンスが返ってきていることが確認できました。

最後に、「code属性のみを指定したメソッド」のレスポンスを確認します。
【http://localhost:8080/test】のURL、かつGETでリクエストを投げると、HTTPステータスが200でレスポンスが

SpringBootの@ResponseStatusアノテーションを解説
が返されているので、指定した内容でレスポンスが返ってきていることが確認できました。

まとめ:@ResponseStatusアノテーションを使ってみよう!

以上がSpringBootでレスポンスのHTTPステータスコードを指定できる@ResponseStatusアノテーションについての解説でした!

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

コメント

タイトルとURLをコピーしました