1.やりたいこと
- Bean Validationでカスタムバリデータを作成してバリデーションをする
- 対象はコレクション(ArrayやList、Setなど)
- ConstraintViolation.getPropertyPath()でproperty[1]みたいに取得できたい
2. やったこと
カスタムバリデータで以下のようにViolationの設定をするとよいっぽい。
// ConstraintValidatorContext context
context.buildConstraintViolationWithTemplate(message)
.addBeanNode()
.inIterable()
.atIndex(index)
.addConstraintViolation()
.disableDefaultConstraintViolation();
.inIterable()でLeafNodeContextBuilderが取得できるので、
それに対してatIndex(index)を呼び出してIndexを設定する。
ConstraintViolation.getPropertyPath()は、property[1]のようになる。
できた。
ちなみに、LeafNodeContextBuilder#atKey(Object)を呼び出すと
.atKey("xyz") // => property[xyz]
みたいになった。
おわり。
追記
List<Bean>みたいにして、Beanのプロパティにアノテーション付けたら、
こんなことしなくて良い..>_<..