Я знаю, это может звучать странно, но мне нужно выполнить такое требование в моем проекте.Давайте перейдем к делу.
Я создал пользовательскую аннотацию, которая также использует @Constraint
, и реализовал мою собственную логику проверки в другом классе, который реализует интерфейс ConstraintValidator
.К сожалению, javax.validation
никогда не добавлялся в качестве зависимости к этому проекту (@Valid
, @NotBlank
, @Email
и т. Д. Не работают), поэтому я вынужден реализовать интерфейс Validator
.
Я знаю, что могу поместить свою пользовательскую логику в метод Validator
validate()
(пробовал, и это работает), но я бы предпочел, чтобы я мог сохранить свою пользовательскую аннотацию на случай, если она понадобится другому разработчику.будущее, когда «стандарты проекта» изменятся.
Могу ли я как-нибудь вызвать метод моей аннотации isValid()
из экземпляра Validator?Возможно ли это, или это все еще разумно, учитывая тот факт, что мне не разрешено добавлять зависимость?
Отрывки кода TLDR: (пишу на моей голове, извините, если есть какие-либо синтаксическиеошибки)
Пользовательская аннотация
@Retention(RUNTIME)
@Target({TYPE})
@Constraint(validatedBy = myCustomValidator.class)
public @interface myCustomAnnotation {
String message() default "dummy";
Class[] groups() default {};
Class[] payload() default {};
class myCustomValidator implements ConstraintValidator<myCustomAnnotation, Object> {
// @Overload initialize
// some code here
// @Overload isValid
public boolean isValid(Object object, ConstraintValidatorContext ctx) {
// some code here, simple return for demonstration purposes
return object != null;
}
}
}
Пользовательский валидатор
public class customValidator implements Validator {
//@Override supports
//@Override validate
public void validate(Object target, Errors errors) {
// somehow invoke my custom annotation here, no other validation code should be here
}
}
Ожидаемое использование с валидатором
public ModelAndView customController(@ModelAttribute("form") CustomForm form, BindingResult errors) {
Validator validator = new CustomValidator();
validator.validate(form, errors);
// expecting errors.hasErrors() to be filled
// ...
}