web-dev-qa-db-ja.com

Jersey / JAX-RS:Beans-validationを@Validで再帰的に自動的にカスケードする方法は?

RESTジャージーのリソースエンドポイントでPOJOを検証しています:

_public class Resource {
    @POST
    public Response post(@NotNull @Valid final POJO pojo) {
        ...
    }
}

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    @Valid
    protected final POJOInner inner;

    ...
}

public class POJOInner {
    @Min(0)
    protected final int limit;

    ...
}
_

これは正常に動作するようです。

ただし、@Min(0)アノテーションは、フィールドinnerに_@Valid_アノテーションがある場合にのみ検証されます。プリミティブではない各フィールドに_@Valid_アノテーションを追加するのは適切ではありません。

_@Valid_アノテーションが存在しない場合でも、Beanバリデータに自動的に再帰的に検証を続行するように指示する方法はありますか? POJOを次のようにしたい:

_public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    protected final POJOInner inner;

    ...
}
_
38
Jasar Tolio

実際、仕様によると、@ Validを追加することはまさにこのユースケースのためのものです。 JSR 303仕様から:

インスタンス検証のサポートに加えて、オブジェクトのグラフの検証もサポートされています。グラフ検証の結果は、制約違反の統一されたセットとして返されます。 Bean XにタイプYのフィールドが含まれている状況を考えます。フィールドYに@Validアノテーションを付けることにより、Xが検証されるときにValidatorがY(およびそのプロパティ)を検証します。

...

@Validアノテーションは再帰的に適用されます

26
Erwin de Gier