【发布时间】:2014-04-08 13:49:07
【问题描述】:
我在 Spring MVC 应用程序中为 MultipartFile 编写了自定义 ConstraintValidator,如下所示:
@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 类中以获取信息吗?
【问题讨论】:
-
让它
@Configurable。 -
使用 setter 将它的依赖项注入到控制器中。没有必要自动连接所有有依赖关系的东西。
-
我认为它可以工作。你试过了吗?如果参数不会改变,我宁愿在应用程序开始时从数据库中加载该参数并将其存储在 ServletContext 中。
标签: java spring spring-mvc bean-validation