1

Spring アプリでの検証に Bean Validation を使用しようとしています。私はBeanで定義された以下のフィールドを持っています -

@NotNull(message = "CUSTOMERROR-1000")
private String firstName;

ここでは、プロパティ ファイルで CUSTOMERROR-1000 を「フィールドは必須」として定義しています。私の ControllerAdvice クラスでは、以下のコードを使用して詳細を取得できます。

getBindingResult().getFieldError().getField()
getBindingResult().getFieldError().getCode()
getBindingResult().getFieldError().getDefaultMessage()

ここでは、フィールド名を firstName として取得します。フィールドに注釈を付けて値を「名」として設定する方法はありますか? 同様に、注釈を介してコード値を設定する方法はありますか?

4

2 に答える 2

1

For that, you need to create your own constraints. Than you can add additional properties, label, errorCode etc., set values to them and use them. See: http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-compound

Than you can define your error message like this: Error code: {errorCode} - {label} is mandatory

于 2015-08-28T23:47:33.187 に答える
1

最も簡単なアプローチ (IMO) は、些細な (IMO) 利益のために多くの作業を行うように思えます。の結果はgetFieldErrorによって提供されますValidator。それを知っていれば、カスタムバリデータをDataBinder. バリデータは次のようになります。

  1. 最初にカスタムバリデーターを定義します

    public class FirstNameValidator implements Validator{
    
         public boolean supports(Class clazz) {
             return YourClass.class.equals(clazz);
         }
    
         public void validate(Object obj, Errors e) {
             if(obj != null){
                YourClass theObj = (YourClass)obj;
                   if(theObj.getFirstName() == null || theObj.getFirstName().trim()==""){
                      e.rejectValue("First Name","CUSTOMERROR-1000");
                   }
          }
    
       }
    

    }

  2. その後、カスタムバリデーターをコンテキストのデータバインダーに登録します (ここで Spring MVC を実行していると想定しています)。

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FirstNameValidator());
    }
    

これにより、必要な形式で名前を取得できます。繰り返しますが、ちょっと派手なテキストの場合は、大量の入力が必要です (注釈ベースのアプローチは同じくらい長く、注釈をサポートするためにさらに多くの入力が必要です)。

于 2015-08-31T20:53:45.007 に答える