1

メソッドでコントローラーを実装しました:

public Page<EventDto> search(@ModelAttribute @Valid EventsCriteria criteria){...}

できます。EventsCriteriaのような内部注釈チェッカーがあるため、それ自体に特別な個別のバリデーターはありませんでした@NotNull @NotEmpty。現在、状況は変化しており、このバリデーターだけでは十分ではありません。そのため、対応するサービスを追加して登録し、いくつかの状態を確認しました。

以前のように、追加の複合ケースと単一の検証を検証するサービスが必要です。しかし、私のような単一の内部注釈チェッカーは@NotNull @NotEmptyもう機能しません。

何かが正しく構成されていませんか、それとも同時に動作しませんか (指定されたサービスと内部チェッカー)?

私のバリデーターの例(コメントで尋ねられたとおり)

春を知っていれば特別なことは何もないので、私の質問にあなたの注意を集中させるために重要でないようなこの部分を見逃しました。

@Component
public class EventsCriteriaValidator implements Validator {

    public static final String INVALID_RAGE_PARAMETERS_SPECIFIED = "Invalid rage parameters: please specify " +
            "'from' and 'to' or page 'size";

    @Override
    public boolean supports(Class<?> clazz) {
        return clazz.isAssignableFrom(EventsCriteria.class);
    }

    @Override
    public void validate(Object target, Errors errors) {
        EventsCriteria toValidate = (EventsCriteria) target;
        validateComplexRestriction(toValidate, errors);
    }

    private void validateComplexRestriction(EventsCriteria toValidate, Errors errors) {
        if (toValidate.isRangeEmpty() && toValidate.getSize() == 0) {
            errors.rejectValue(SIZE_FIELD, null, INVALID_RAGE_PARAMETERS_SPECIFIED);
        }
    }

}
4

3 に答える 3