将Spring Bean注入基于注释的Bean验证器

时间:2014-04-08 13:49:07

标签: java spring spring-mvc bean-validation

我在Spring MVC应用程序中为ConstraintValidator编写了一个自定义MultipartFile,看起来像这样:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MultipartFileNotEmptyValidator.class})
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER })
public @interface MultipartFileNotEmpty {
  String message() default "{errors.MultipartFileNotEmpty.message}";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}

这里是validatedBy部分:

public class MultipartFileNotEmptyValidator implements ConstraintValidator<MultipartFileNotEmpty, MultipartFile>
{
  @Override
  public void initialize(MultipartFileNotEmpty annotation)
  {
    // Nothing here
  }

  @Override
  public boolean isValid(MultipartFile file, ConstraintValidatorContext context)
  {
    return !file.isEmpty();
  }
}

这个很有效,非常简单。我想要做的是创建第二个来检查并确保MultipartFile根据存储在数据库表中的值不太大 。我可以以某种方式将适当的服务注入新的ConstraintValidator类以获取信息吗?

2 个答案:

答案 0 :(得分:7)

使用@Autowired实际上并不是什么特别的事情。来自Spring documentation

  

... ConstraintValidator实现可能有其依赖项   @Autowired像任何其他Spring bean一样。

答案 1 :(得分:-1)

@Component
public class MultipartFileNotEmptyValidator

然后您可以使用@Autowired并注入依赖项。对我来说就像是一种魅力。