Я знаю, что это возможный дубликат, и я нашел несколько потоков, таких как Как найти все бины с пользовательской аннотацией @Foo? или Пользовательская аннотация не работает на бобах весны , но это не совсем то, что я делаю или хочу делать.
Я хочу простой валидатор для длины атрибутов класса. Не говорите мне о @Length
или @Size
. Они здесь не помогают. Я попробовал несколько решений, и ни одно из них не сработало.
CustomAnnotation:
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckLengthValidator.class)
@Qualifier // got this one from a solution
public @interface CheckLength {
Class<?> className();
Class<?>[] groups() default {};
String message() default "List is not valid";
Class<? extends Payload>[] payload() default {};
}
CustomAnnotationValidator (методы еще не реализованы):
public class CheckLengthValidator implements ConstraintValidator<CheckLength, List<Transaction>> {
@Override
public void initialize(CheckLength a) {
//get values which are defined in the annotation
System.out.println("init");
test = a.message();
}
@Override
public boolean isValid(List<Transaction> value, ConstraintValidatorContext context) {
for (Transaction x : value) {
if (x.getTimestamp().length() > 30) {
System.out.println("not valid");
return false;
}
}
return true;
}
}
Так, где мне использовать Это? В моем API, где есть все автоматические репозитории.
@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class FileManagementRestAPI {
@Autowired
@CheckLength(className = Transaction.class)
List<Transaction> transaction = new ArrayList<>();
...
}
Позже это будет вызвано для заполнения списка.
transaction.addAll((Collection<? extends Transaction>) csvToBean.parse());
Что я пробовал:
Я читал о решение, которое я позже обнаружил, что оно устарело или больше не работает с CommandLineRunner
и AnnotationConfigApplicationContext
.
Затем я прочитал, что должен объявить его как Bean, но список здесь не является Боб или мне все еще нужно что-то делать с Бобами? Видел что-то вроде этого, но не знал, что с ним делать тогда:
public class InitBeans implements BeanPostProcessor { ... }
Ошибка, которую я получаю сейчас:
Field transaction in com.stuff.project.apis.FileManagementRestAPI required a bean of type 'java.util.List' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
- @com.stuff.project.utils.CheckLength(message=List is not valid, groups=[], payload=[], className=class com.stuff.project.entity.Transaction)
Action:
Consider defining a bean of type 'java.util.List' in your configuration.
Было несколько других ошибок, когда я пытался запусти его.