2016-12-02 8 views
2

Hibernate Validatorによって生成されたレスポンスをオーバーライドする例外マッパーを作成しました。Hibernate Validator:制約違反メッセージのオーバーライド

私の問題は、制約違反の種類に基づいて簡単に切り替えることが困難なため、カスタムメッセージの作成に問題があることです。理想的には、注釈に基づいてスイッチを設定し、レスポンスでカスタムメッセージングを返すことができます。理想的には、次のようになります。

@Override 
public Response toResponse(ConstraintViolationException exception) { 

    ConstraintViolation violation = exception.getConstraintViolations().iterator().next(); 

    String message = null; 
    switch (violation.getType()) { 
     case SomeEnum.NOT_NULL: 
      message = "It's not null!"; 
      break; 
     default: 
      message = "Other message!"; 
    } 

    ... 
} 

このような単純なことはありますか?

+0

これは素晴らしいアプローチではありません。メッセージを国際化したいのですが?この道を行くなら、注釈付きの 'message'をキーにして、通常のメッセージバンドルを使います。既定の制約注釈の既定値を参照してください。 – chrylis

+0

私は既に国際化を扱うための文字列ファイルを持っています。私は例を簡略化して、それが焦点ではないようにしました。私がここで興味を持っているのは、どこからメッセージを取り出すのではなく、正しいメッセージングを選択するメカニズムです。 – Brandon

答えて

1

ConstraintViolation#getConstraintDescriptor()は役に立ちます。とりわけ、返された記述子は、違反制約の注釈型を公開します、問題はより良いあなたに制約違反内で予想されるメッセージをすぐに与えるカスタムMessageInterpolatorを実装することで対処することができるとされていること

if (violation.getConstraintDescriptor().getAnnotation().annotationType() == NotNull.class) { ... } 

関連する問題