【SpringBoot】JSON形式でレスポンスを返す方法

 

こんにちは。11月になりだいぶ寒くなってきました。冷えがなんだか腰にくるようになりました。

タグボート開発メンバーのワシヅカです。

 

今日は、SpringBootでjson形式のデータを返却する実装をご紹介したいと思います。

今回の開発でSpringBootは初めて触ったのですが、びっくりするほど簡単に実装できてしました。思わず「おぉ!」感動してしまいましたので、ぜひお試しいただければと思います。Controllerクラスと、Entityクラスの実装を載せて解説したいと思います。

必要な実装

必要な実装は、Controllerクラスと、Entityクラスの2つだけです。

Viewとなる(templateとなる)、「htmlファイル」については作成する必要はありません。

Jacksonというライブラリを使用しているので、eclipseを使用している場合は、「Maven依存関係」の中のライブラリに

  • jackson-databind
  • jackson-annotations
  • jackson-core

があることを確認して下さい。

 

紹介する処理の流れ

細かい実装のお話をする前に、まずは大まかな処理の流れを説明します。

大きな流れとしては、Controller→Service→Repository→Entityの流れでデータを取得し、Controllerまでデータ(Entity)を返していきます。ServiceクラスとRepositoryクラスについては今回割愛していますが、JPAを使ってデータを取得するためのサービスを作っています。

 

 

Controllerクラスの実装

では、まずはControllerクラスの解説です。Controllerクラスのポイントは3つです。

  1. @ResponseBody アノテーション を設定する
  2. 戻り値の型はResponseEntity<?> にする
  3. ResponseEntity.ok()メソッド で OKステータスとともに2.で指定した戻り値の型を返却する

です。他の部分は、通常のSpringBootの実装と同じと考えて良いと思います。

たったこれだけのポイントで、Entityクラスをjson形式に変換してレスポンスを返してくれます。

 

(※下に記載している実装は、一部省略しています。)

 

 

 

Entityクラスの実装

続いて、コントローラーで返却しているEntityクラスです。こちらのポイントは2つ。

@JsonFormatアノテーション

@JsonIgnoreアノテーション

です。

@JsonFormatアノテーションは出力したいフォーマットに変換して、出力してくれます。

Date型の場合、フォーマットを介して返却しないと、「Datetime”:1510298993000」のようにlong型で返却されてしまいます。

@JsonIgnoreアノテーションを設定すると、Json出力の対象外となります。

 

(※下に記載している実装は、一部省略しています。)

 

出力結果

継承しているBaseEntityのプロパティー(deleteflgなど)も、しっかりjson形式で出力できました。

レスポンスヘッダのContent-Typeもしっかり「application/json」となっています。

まとめ

以上のような実装で簡単にjson形式で返却することができました。Controllerクラスの実装とほんの少しの修正をEntityに施すだけで良いというのは本当に便利です。Entityクラスに設定したJackson用の「@JsonFormat」のようなアノテーションは他にも種類があるようですので調べておこうと思います。

また、実際試していないのですが、Controllerの戻り値の型をList<Entity>のようなリスト形式にしてもjson形式に自動変換してで返却できるようです。この件については、試したら追記しようと思います。

 

参考になったサイト

Class ResponseEntity<T>ドキュメント
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

Jackson使い方メモ
https://qiita.com/opengl-8080/items/b613b9b3bc5d796c840c

Spring Boot 使い方メモ
https://qiita.com/opengl-8080/items/05d9490d6f0544e2351a

Spring Boot解説第19回
https://qiita.com/YAKINIKU/items/abaa54ba531a30850d10

Springの@RequestBodyアノテーションと@ResponseBodyアノテーション
http://code.i-harness.com/ja/q/ac4d1d



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください