带接口的Spring MVC自定义验证问题

时间:2017-08-23 20:43:17

标签: java spring spring-mvc

我正在尝试对类别产品进行自己的验证。这是一项任务 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;
    }

}

0 个答案:

没有答案