0

私は自分のバリデータを書いたので、春のフォームを検証しています。そのため、エラー コードを表示できませんでした。

私はモデル/ポジョクラスを持っています。

public class Person{
    private String dob;

    @InHouse
    private Contact contact;

   //getters and setters
}

ここで「Contact」は別のクラスで、3 つの変数があります。

public class Contact{
  private String mobile1;
  private String mobile2;
  private String mobile3;

  //getters and setters
}

休止状態の接続はすべて問題ありません。

以下は私のカスタムバリデータです。

    @Override
public void validate(Object argTarget, Errors argErrors) {
    Person person = (Person) argTarget;
    validate(argTarget.getClass(), argErrors, person);
    List<Field> inHouseAnnotationFields = AnnotationProcessor
            .getAnnotatedFields(argTarget.getClass(), InHouse.class);
    if (Precondition.checkNotEmpty(inHouseAnnotationFields)) {
        for (Field field : inHouseAnnotationFields) {
            System.out.println(field.getName());
            Object obj = getValue(person, field.getName());
            validate(field.getType(), argErrors, obj);
        }
    }
}

@SuppressWarnings("unchecked")
protected void validate(Class<?> argClass, Errors argErrors,
        Object argObject) {
    List<Field> calidationFieldsList = AnnotationProcessor
            .getAnnotatedFields(argClass, Validation.class);
    if (Precondition.checkNotEmpty(calidationFieldsList)) {
        for (Field field : calidationFieldsList) {
            try {
                field.setAccessible(true);
                Object result;
                result = field.get(argObject);

                Object instance = getValidatorInstance(argClass, field);
                if (Precondition.checkNotNull(instance)
                        && Precondition.checkNotNull(result)) {
                    com.rise.validation.Validation<String, String> validation = (com.rise.validation.Validation<String, String>) instance;
                    boolean valid = validation.validate(result.toString());
                    if (!valid) {
                        argErrors.rejectValue(field.getName(),
                                field.getName() + " Validation Failed");
                    }
                }
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

上記のコードでは、「InHouse」がカスタム アノテーションです。Contact(Person Class) 変数にはこのアノテーションがあります。

私の入力では、mobile3フィールドに間違った電話番号を指定しました。

ここではすべてのフィールドを検証しています。ここでは反射を使用しています。変数 (「有効」) に基づいてすべてのエラー メッセージを追加します。したがって、「argErrors.rejectValue(arg1,arg2)」を使用すると、次のような例外が発生します。

org.springframework.beans.NotReadablePropertyException: Bean クラス [com.rise.common.model.Person] の無効なプロパティ 'mobile3': Bean プロパティ 'mobile3' が読み取れないか、無効なゲッター メソッドがあります: ゲッターの戻り値の型セッターのパラメーターの型と一致しますか?

ここで、私の mobile3 は私の「連絡先」クラスにあります。すべてのエラー メッセージをargErrorsオブジェクトに追加しているときに、なぜこの例外が発生するのかわかりません。

誰でもこれについて私を助けることができますか?

注:ここでは、リフレクションを使用してフィールドを反復処理しています。たとえば、最初にPersonフィールド (dob)を反復処理し、次にPersonからContactオブジェクトを取得してから、 Contactフィールドを反復処理します。

ここで立ち往生しました。これについて私を助けてください。また、それはCustom Validatorsを書く正しい方法です。

ありがとう、アマール。

4

1 に答える 1