1

私は、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
    }

これは決定するための適切なアプローチですか、それともこれを行うための他の効率的または適切なアプローチがありますか?

4

1 に答える 1

1

Bean Validation 1.0 を使用している場合は、に依存することをお勧めします (if ステートメントNode#getName()に含める必要があることに注意してください)。leafNode.getName() != null

Bean Validation 1.1 は、さまざまな要素の種類の列挙を返すメソッドを追加するNode#getKind()ため、既に 1.1 を使用している場合は、これが望ましい方法です。

于 2013-10-10T11:06:16.570 に答える