3.1.3.2. 検索機能の作成

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

作成する機能の説明

本機能は、GETリクエスト時にクエリパラメータに検索条件を付与することで、 条件に合致するプロジェクト情報をJSON形式で返却する。

検索条件として、 顧客ID(完全一致)プロジェクト名(部分一致) を指定できる。 検索条件を指定しない場合は、全てのプロジェクト情報を返却する。

動作確認手順
  1. プロジェクト情報の検索

ここでは、顧客IDが 1 のプロジェクト情報を検索する。

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

URL
http://localhost:9080/projects?clientId=1
HTTPメソッド
GET
  1. 検索結果の確認

1.を実行した結果、以下のようなJSON形式のレスポンスが返却されることを確認する。

[{
    "projectId":1,
    "projectName":"プロジェクト001",
    "projectType":"development",

    // 省略

}]

3.1.3.2.1. プロジェクト情報を検索する

フォームの作成

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

ProjectSearchForm.java
public class ProjectSearchForm implements Serializable {

    /** 顧客ID */
    @Domain("id")
    private String clientId;

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

    // ゲッタ及びセッタは省略
}
この実装のポイント
検索条件を保持するBeanの作成

検索条件を保持するBeanを作成する。

ProjectSearchDto.java
public class ProjectSearchDto implements Serializable {

    /** 顧客ID */
    private Integer clientId;

    /** プロジェクト名 */
    private String projectName;

    // ゲッタ及びセッタは省略
この実装のポイント
検索に使用するSQLの作成

検索に使用するSQLを作成する。

Project.sql
FIND_PROJECT =
SELECT
    *
FROM
    PROJECT
WHERE
    $if(clientId) {CLIENT_ID = :clientId}
    AND $if(projectName) {PROJECT_NAME LIKE :%projectName%}
この実装のポイント
業務アクションメソッドの実装

検索条件をもとにデータベースから検索する処理を実装する。

ProjectAction.java
@Produces(MediaType.APPLICATION_JSON)
public List<Project> find(JaxRsHttpRequest req) {

    // リクエストパラメータをBeanに変換
    ProjectSearchForm form =
            BeanUtil.createAndCopy(ProjectSearchForm.class, req.getParamMap());

    // BeanValidation実行
    ValidatorUtil.validate(form);

    ProjectSearchDto searchCondition = BeanUtil.createAndCopy(ProjectSearchDto.class, form);
    return UniversalDao.findAllBySqlFile(Project.class, "FIND_PROJECT", searchCondition);
}
この実装のポイント
  • 検索結果をJSON形式でクライアントに返却するため、 Produces アノテーションに MediaType.APPLICATION_JSON を指定する。
  • クエリパラメータは JaxRsHttpRequest から取得する。
  • BeanUtil を使用してリクエストパラメータからフォームを作成する。
  • ValidatorUtil#validate を使用してフォームのバリデーションを行う。
  • フォームの値を BeanUtil を使用して検索条件Beanにコピーする。
  • ユニバーサルDAO を使用して取得したプロジェクト情報のリストを戻り値として返却する。
  • 戻り値のオブジェクトは リクエストボディ変換ハンドラ によってJSON形式に変換されるため、 業務アクションメソッド内で変換処理を実装する必要はない。
URLとのマッピングを定義

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

ProjectAction.java
@Path("/projects")
public class ProjectAction {
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public List<Project> find(JaxRsHttpRequest req) {

      // リクエストパラメータをBeanに変換
      ProjectSearchForm form =
              BeanUtil.createAndCopy(ProjectSearchForm.class, req.getParamMap());

      // BeanValidation実行
      ValidatorUtil.validate(form);

      ProjectSearchDto searchCondition = BeanUtil.createAndCopy(ProjectSearchDto.class, form);
      return UniversalDao.findAllBySqlFile(Project.class, "FIND_PROJECT", searchCondition);
  }
この実装のポイント
  • @Path アノテーションと @GET アノテーションを使用して、GETリクエスト時にマッピングする業務アクションメソッドを定義する。