ファイルとJSONをRESTで受信するSpringBoot

概要

任意のファイルとJSONをRESTで受信する際のサーバサイドのコードを残します。

JDK20 SpringBootは3系を使用します。

コードの全体は、以下を参照してください。

今回は、JSON文字列とcsvファイルをHTTPのPOSTメソッドを使用してmultipart/form-dataというcontents-typeで通信を行い何らかの情報を登録する処理想定でサーバサイドを記述します。

仮想的な主シナリオは以下になります。

営業担当者が日報登録画面で営業を行った日(2023/4/19)の日報のタイトルと概要と何時間働いたかを入力し、営業を行ったユーザのメールアドレスと営業結果(成功/失敗)の一覧のcsvファイル添付しBEに送信ボタンをクリックするとシステムは、営業担当者のIDと営業実施日とタイトルと概要と労働時間をJSONで送信し、営業結果をcsvファイルで送信し、登録が成功した場合、204を返却すると、日報登録が成功した表示がでて日報一覧画面に遷移する。

仮想的な副シナリオは以下

  1. DB接続に失敗した場合
  2. 必須項目の入力が不足している場合
  3. ファイルの形式が異なる場合

やらないこと

といろいろ書いたんですが、バリデーションチェックは必須項目チェックのみ行ってほかの項目のチェックは行わず、DBへの保存も行いません。 あくまで、サーバサイドで受信するところまでを記述します。 ユースケースを考えたくなったのでだらだら書いてしまいました。

IFとか

JSON

json部のkeyはjsonValue。 keyはmultipartで指定する際に使用します。 JSONの例は以下。IFはちょっと省きます。

{
  "employeeId": 1234567890,
  "soldDate": "2022-01-01",
  "operatedTime": 5.5,
  "soldMemo": {
    "title": "2022-01-01の営業記録",
    "memo": "普段あまり対象としない層に向けた営業を行った。\n感触は上々。"
  }
}

ファイル部

ファイル部のkeyはfileとします。 ファイルの例は以下。 IFの詳細は省きます。最大サイズは5MBとします。

mail@example.com,OK\n
mail2@example.com,NG\n