Jakarta RESTful Web Servcies Bean Validationハンドラ

補足

本機能は、Nablarch5までは「JAX-RS BeanValidationハンドラ」という名称だった。 しかし、Java EEがEclipse Foundationに移管され仕様名が変わったことに伴い「Jakarta RESTful Web Servcies Bean Validationハンドラ」という名称に変更された。

変更されたのは名称のみで、機能的な差は無い。

その他、Nablarch6で名称が変更された機能については Nablarch5と6で名称が変更になった機能について を参照のこと。

本ハンドラは、リソース(アクション)クラスが受け取るForm(Bean)に対して、Bean Validation を実行する。 バリデーションでバリデーションエラーが発生した場合には、後続のハンドラに処理は委譲せずに、 ApplicationException を送出して処理を終了する。

本ハンドラでは、以下の処理を行う。

  • リソース(アクション)クラスのメソッドが受け取るFormに対する Bean Validation を行う。

処理の流れは以下のとおり。

../../../../_images/flow18.png

モジュール一覧

<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-fw-jaxrs</artifactId>
</dependency>

<!-- Bean Validationのモジュール -->
<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-core-validation-ee</artifactId>
</dependency>

制約

リクエストボディ変換ハンドラ よりも後ろに設定すること
このハンドラは、 リクエストボディ変換ハンドラ がリクエストボディから変換したForm(Bean)に対してバリデーションを行うため。

リソース(アクション)で受け取るForm(Bean)に対してバリデーションを実行する

リソース(アクション)のメソッドで受け取るForm(Bean)に対して、バリデーションを実行したい場合は、 そのメソッドに対して Valid アノテーションを設定する。

以下に例を示す。

// Personオブジェクトに対してバリデーションを実行したいので、
// Validアノテーションを設定する。
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Valid
public HttpResponse save(Person person) {
    UniversalDao.insert(person);
    return new HttpResponse();
}

Bean Validationのグループを指定する

Valid アノテーションを設定したメソッドに対して ConvertGroup アノテーションを設定することで、Bean Validationのグループを指定することができる。

ConvertGroup アノテーションは from 属性と to 属性の指定が必須である。 それぞれ以下のように指定すること。

  • from ・・・ Default.class 固定
    • メソッドに Valid アノテーションを設定する場合、 バリデーションは Default グループを設定したものとして実行されるため。
  • to ・・・Bean Validationのグループを指定する

以下に例を示す。

// Personクラス内で設定されたバリデーションルールのうち、
// Createグループに所属するルールのみを使用して検証する。
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Valid
@ConvertGroup(from = Default.class, to = Create.class)
public HttpResponse save(Person person) {
    UniversalDao.insert(person);
    return new HttpResponse();
}