我正在尝试对类别产品进行自己的验证。这是一项任务 Spring MVC:初学者指南一书。 我已经编写了一个界面,我需要对类别进行验证,其中用户无法编写不同的类别,然后在集合中。
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = CategoryValidator.class)
@Documented
public @interface ICategory {
List<String> allowedCategories;
String message() default "{com.packt.webstore.validator.category.message}";
Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() default {};
}
在任务中我应该保持List<String> allowedCategory
。但我有一个警告:
“空白的最终字段allowedCategories可能没有 初始化“
我做错了什么?我不能在界面中使用字段吗?我该怎么做呢?
下面我向您展示该接口的实现类:
@Component
public class CategoryValidator implements ConstraintValidator<IProductId, String>{
private List<String> allowedCategories;
public CategoryValidator() {
allowedCategories = getAllCategories(productService.getAllProducts());
}
private List<String> getAllCategories(List<Product> products) {
List<String> categories = new ArrayList<String>();
for (Product product : products) {
categories.add(product.getCategory());
}
return categories;
}
@Autowired
private IProductService productService;
public void initialize(IProductId constraintAnnotation) {
}
public boolean isValid(String value, ConstraintValidatorContext context) {
for (String category : allowedCategories) {
if(category.equals(value)) {
return true;
}
}
return false;
}
}