我正在使用此答案中HibernateValidator指定的表格上的两个字段"password"和"confirmPassword"进行验证.以下是约束描述符(验证器接口).
package constraintdescriptor;
import constraintvalidator.FieldMatchValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch
{
String message() default "{constraintdescriptor.fieldmatch}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* @return The first field
*/
String first();
/**
* @return The second field
*/
String second();
/**
* Defines several <code>@FieldMatch</code> annotations on the …Run Code Online (Sandbox Code Playgroud) 我目前有一个采用 MultipartFile 的 Spring MVC 控制器
@RequestMapping(method = RequestMethod.POST)
public String doUpload(@RequestParam("file") final MultipartFile file) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
该文件包含将用于创建域对象列表的 csv 数据,每行一个。这是有效的。
我为行数据编写了一个转换器:
class MyObjectConverter implements org.springframework...Converter<String[], MyObject> {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
和文件的验证器
class UploadFileValidator implements org.springframework.validation.Validator {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
我有一个表格可以上传:
<form method="post"
action="<@spring.url '/upload'/>"
enctype="multipart/form-data">
<input id="upload" type="file" name="file"/>
<input type="submit" id="uploadButton"/>
</form
Run Code Online (Sandbox Code Playgroud)
但我真正想做的是将它们联系在一起,这样我的控制器就可以有一个类似的方法
@RequestMapping(method = RequestMethod.POST)
public String doUpload(
@Valid final List<MyObject> objList,
final BindingResult result) { ...}
Run Code Online (Sandbox Code Playgroud)
我知道 Spring MVC 框架支持转换器和验证器,但我不明白如何让它们协同工作。