B-Teck!

お仕事からゲームまで幅広く

【Kotlin】KotlinでJava EEのBean Validationを使うときの注意点

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型にしてしまうと、そもそも変数に格納できずエラーとなってしまう。