Kotlinの場合のBean Validationのアノテーションの書き方
Kotlinでdata classをbean paramとして利用してBean validationを行う際、
下記のように書くと正しくvalidationされない。
- パラメータが欠けると500エラーで死ぬ
(
?=fuga
や?hoge=
など)
data class Test( @QueryParam("hoge") @NotNull val hoge: String? )
これは、アノテーションがコンストラクタに付与されたとみなされており、
フィールド自体がvalidationされていないことが原因。
なので、明示的に@field:
(または@get:
)等をつけて、
Bean validationを利用できるようにする必要がある。
- こっちだとOK
data class Test( @QueryParam("hoge") @field:NotNull val hoge: String? )
参考 : KotlinでJSR303(Bean Validation)を使うときの注意 - mike-neckのブログ
@NotNullを付与したパラメータもNullableで受ける
アノテーションで@NotNull
をつけている場合でも、
フィールドの型はNullableにする必要がある。
* これはNG
data class Test( @QueryParam("hoge") @field:NotNull val hoge: String )
- これはOK
data class Test( @QueryParam("hoge") @field:NotNull val hoge: String? )
これは、一度パラメータを受け取ってフィールドに格納したあと検証するためで、
フィールドの方をNon Null型にしてしまうと、そもそも変数に格納できずエラーとなってしまう。