表单输入文件的spring注释验证

时间:2012-10-15 02:03:07

标签: java spring validation

  

可能重复:
  Spring MultipartFile validation and conversion

我需要检查用户是否从jsp页面提供了文件。

代码如下。

当我在调试模式下运行时,文件(MultiPartFile)不为null,但未提供该文件。

我想对所有内容使用基于注释的验证。

任何帮助都将不胜感激。

    <form:form modelAttribute="timeStampIssueParam"
        action="${pageContext['request'].contextPath}/timestamp/issue"
        method="post" enctype="multipart/form-data">
        <fieldset>
            <p>
                <form:label for="file" path="file">PDF Original</form:label>
                <br />
                <form:input path="file" type="file"/>
            </p>
            <p>



    @NotNull
    private List<MultipartFile> file

    public void issue(HttpServletResponse response, @Valid TimeStampIssueParam tsIssueParam, BindingResult result) throws JsonGenerationException, JsonMappingException, IOException {

1 个答案:

答案 0 :(得分:0)

我认为没有为此目的构建验证器。所以你需要建立自己的:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = { OneFileItemValidator.class })
@Documented
public @interface OneFileItem {

    String message() default "{OneFileItem.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

验证员:

public class OneFileItemValidator
       implements ConstraintValidator<OneFileItem, List<MultipartFile>> {

    @Override
    public void initialize(final OneFileItem constraintAnnotation) {
    }

    @Override
    public boolean isValid(final List<MultipartFile> value, final ConstraintValidatorContext context) {

         //Ignore null values like the most other validators
         if (value == null) return true;

         int foundCounter = 0;
         for (MultipartFile multipartFile : value) {
            if (multipartFile.getSize() > 0) 
               foundCounter++);                
        }
        return foundCounter == 1;
    }
}

用法:

/** Command Object / Form Backing Class */
class TimeStampIssueParam {

    @NotNull
    @OneFileItem
    private List<MultipartFile> file;

}

我在没有IDE的情况下写了这个,所以可能会出现一些语法错误。