Spring Boot 2.3.1, с OpenJDK 14
Аннотация ограничений:
@Documented
@Constraint(validatedBy = {MyConstraintAnnotationValidator.class})
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyConstraintAnnotation {
String message() default "";
Class[] groups() default {};
Class[] payload() default {};
Class clazz();
// or, not sure: Class<?> clazz();
}
Валидатор аннотаций ограничений:
public class MyConstraintAnnotationValidator implements ConstraintValidator<MyConstraintAnnotation, String> {
@Override
public void initialize(MyConstraintAnnotation constraintAnnotation) {
// cac is: configurableApplicationContext
Object obj = cac.getBean(constraintAnnotation.clazz());
// problem: obj doesn't provide the methods to access
// on the left side of the variable shall be also the clazz type
// which is passed to the constraint annotation
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
return true;
}
}
Использование аннотаций ограничений:
public class MyPojo {
...
@MyConstraintAnnotation(clazz = MyProperties.class)
private String field1;
...
// Getter/ Setter
}
Класс свойств:
@Component
@PropertySource("classpath:myproperties.properties")
@ConfigurationProperties(prefix = "myprefix")
public class MyProperties {
// fields
// Getter / Setter
}
Через аннотацию ограничений я хочу указать свой класс свойств, который будет использоваться в процессе проверки в классе валидатора.
Но внутри метод initialize(..)
Я не могу получить доступ к Getter / Setter
из моего класса свойств (MyProperties.class), потому что configurableApplicationContext.getBean(...)
возвращает Object
, должен создать переменную и передать ее переданному классу (например, MyProperties.class
).
Как создать переменную, которая имеет в левой части тот же тип, который передается в аннотацию ограничения?