我需要检查用户是否从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 {
答案 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的情况下写了这个,所以可能会出现一些语法错误。