3.1.3.1. 登録機能の作成

Exampleアプリケーションを元に、登録機能を解説する。

作成する機能の説明
本機能は、POSTリクエスト時にリクエストボディにJSON形式のプロジェクト情報を設定することで、 データベースにプロジェクト情報を登録する。
動作確認手順
  1. 事前にDBの状態を確認

    H2のコンソールから下記SQLを実行し、レコードが存在しないことを確認する。

    SELECT * FROM PROJECT WHERE PROJECT_NAME = 'プロジェクト999';
    
  2. プロジェクト情報の登録

任意のRESTクライアントを使用して、以下のリクエストを送信する。

URL
http://localhost:9080/projects
HTTPメソッド
POST
Content-Type
application/json
リクエストボディ
{
    "projectName": "プロジェクト999",
    "projectType": "development",
    "projectClass": "ss",
    "projectManager": "山田",
    "projectLeader": "田中",
    "clientId": 10,
    "projectStartDate": "20160101",
    "projectEndDate": "20161231",
    "note": "備考999",
    "sales": 10000,
    "costOfGoodsSold": 20000,
    "sga": 30000,
    "allocationOfCorpExpenses": 40000
}
  1. 動作確認

H2のコンソールから下記SQLを実行し、レコードが1件取得できることを確認する。

SELECT * FROM PROJECT WHERE PROJECT_NAME = 'プロジェクト999';

3.1.3.1.1. プロジェクト情報を登録する

フォームの作成

クライアントから送信された値を受け付けるフォームを作成する。

ProjectForm.java
public class ProjectForm implements Serializable {

    // 一部のみ抜粋

    /** プロジェクト名 */
    @Required
    @Domain("projectName")
    private String projectName;

    // ゲッタ及びセッタは省略
}
この実装のポイント
業務アクションメソッドの実装

プロジェクト情報をデータベースに登録する処理を実装する。

ProjectAction.java
@Consumes(MediaType.APPLICATION_JSON)
@Valid
public HttpResponse save(ProjectForm project) {
    UniversalDao.insert(BeanUtil.createAndCopy(Project.class, project));
    return new HttpResponse(HttpResponse.Status.CREATED.getStatusCode());
}
この実装のポイント
  • リクエストをJSON形式で受け付けるため、 Consumes アノテーションに MediaType.APPLICATION_JSON を指定する。
  • Valid アノテーションを使用して、リクエストのバリデーションを行う。 詳細は JAX-RS BeanValidationハンドラ を参照。
  • BeanUtil でフォームをエンティティに変換し、 ユニバーサルDAO を使用してプロジェクト情報をデータベースに登録する。
  • 戻り値として、リソースの作成完了(ステータスコード: 201 )を表す HttpResponse を返却する。
URLとのマッピングを定義

ルーティングアダプタ を使用して、業務アクションとURLのマッピングを行う。 マッピングには JAX-RSのPathアノテーション を使用する。

ProjectAction.java
@Path("/projects")
public class ProjectAction {
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Valid
  public HttpResponse save(ProjectForm project) {
    UniversalDao.insert(BeanUtil.createAndCopy(Project.class, project));
    return new HttpResponse(HttpResponse.Status.CREATED.getStatusCode());
}
この実装のポイント
  • @Path アノテーションと @POST アノテーションを使用して、POSTリクエスト時にマッピングする業務アクションメソッドを定義する。