java - 在 javax Validator 中使用 @Value
问题描述
我实际上尝试在java Validator中使用@Value,就像这样
@Value("${necessary-list}")
private List<String> list= new ArrayList<>();
@Override
public boolean isValid(String element, ConstraintValidatorContext constraintValidatorContext) {
return list.contains(element);
}
}
@Documented
@Constraint(validatedBy = CustomValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsInList{
String message() default "test";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
我已将注释放在对象“Item”的字段中
@Service
public class ItemValidator {
public void validateAddress(Item item) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Item>> constraintViolations = validator.validate(item);
if (isNotEmpty(constraintViolations)) {
throw new ConstraintViolationException(constraintViolations);
}
}
}
在配置中,我尝试了两种方法:
necessary-list: item1,item2,item3
necessary-list:
- item1
- item2
- item3
但不起作用:/ @Value 在控制器中工作
对此有什么建议吗?
解决方案
感谢一个不幸删除了他的评论的人,我找到了解决方案:
我已经添加了配置:
@Bean
public Validator validatorWithSpringContext(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byDefaultProvider().configure()
.constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
return validatorFactory.getValidator();
}
之后只需要使用 validatorWithSpringContext
代表OP添加
推荐阅读
- c# - 从 Agilent 34970A 读取
- javascript - 特殊字符被解析为 �
- php - 使用 laravel 在同一张表中使用两次相同的 FK
- python - 对于并且如果在数据框列中 - 在之前的一些行中添加到另一个数据框
- javascript - 如何在 Angular 中重现 Angular JS .broadcast() / .on() 行为?
- bash - 如何从该工作区的终端上的 bash 命令中判断当前可以看到哪个 Xfce 工作区?
- sql - 如何在 SQL Server 中加入稀疏表并填充行
- ruby - 如何使用 Ruby 和 Rack 在 Windows 上运行 Vagrant
- java - 如果应用程序在前台,通知不会显示在通知抽屉中
- php - 使用php的sql查询中的动态值