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

And*_*ndy 3 java spring spring-mvc bean-validation

我写了一个定制ConstraintValidatorMultipartFile在Spring MVC应用程序,它看起来是这样的:

@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 {};
}
Run Code Online (Sandbox Code Playgroud)

这是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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*ndy 8

它实际上并没有什么特别需要使用@Autowired.从Spring文档:

... ConstraintValidator实现可能像任何其他Spring bean一样具有@Autowired的依赖关系.

  • @BenGeorge不再是真的。我可以使用Spring Boot 1.5.3确认构造函数注入工作正常,Spring版本是4.3.8 (2认同)