私は、JSR303 Bean 検証に基づいて Bean を検証するのに役立つ汎用プラグインに取り組んでいます。汎用である必要があるため、基盤となるベンダーの実装に依存することはできません。
ConstraintViolationオブジェクトから制約違反のタイプを判別する必要があります。1つの方法は使用することConstraintViolation#getPropertyPath()
です。getName()
ノードで null を返す場合はleaf
クラス レベルの制約があり、それ以外の場合はプロパティ レベルの制約があります。
1つのオプションは次のようなものです
Iterator<Node> violationNodes=violation.getPropertyPath().iterator();
Node leafNode=null;
while (violationNodes.hasNext()){
leafNode=violationNodes.next();
}
if(leafNode!=null){
// property constraint
}
else{
// class constraint
}
これは決定するための適切なアプローチですか、それともこれを行うための他の効率的または適切なアプローチがありますか?