Possible Duplicate:
Spring MultipartFile validation and conversion
我需要检查用户是否从 jsp 页面提供了文件。
代码如下。
当我在 Debug模式下运行时,文件 (MultiPartFile) 不为空,尽管未提供该文件。
我想对所有内容使用基于注解的验证。
如有任何帮助,我们将不胜感激。
<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 {
我认为没有为此目的而构建的 validator 。所以你需要建立自己的:
@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 { };
}
validator :
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 的情况下编写的,因此其中可能存在一些语法错误。