Spring validator提供对项目中的POJO或其他需要验证的地方进行验证的接口Validator。该接口有两个方法分别为:
boolean supports(Class<?> clazz); 是否支持对提供的类进行验证 void validate(Object target, Errors errors);具体验证的过程和规则。
一。Photo
package com.spring;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-9-6
* Time: 下午10:01
*/
public class Photo {
private String name;
private String path;
private String description;
public Photo(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
二。PhotoValidator 实现Validator接口
package com.dream.validator;
import com.dream.model.photo.Photo;
import org.springframework.validation.*;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-9-6
* Time: 下午9:39
*/
public class PhotoValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Photo.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "name", "Empty name of photo");
Photo photo = (Photo) target;
String name = photo.getName();
if (name.length() > 10) {
errors.rejectValue("name", "Too long of name's length");
}
}
}
三。ValidatorTest
package com.spring;
import com.dream.model.photo.Photo;
import com.dream.validator.PhotoValidator;
import junit.framework.TestCase;
import org.springframework.validation.DirectFieldBindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-9-6
* Time: 下午9:38
*/
public class ValidatorTest extends TestCase {
public void testValidator() throws Exception {
Photo photo = new Photo("This is the name of a photo.");
Validator validator = new PhotoValidator();
Errors errors = new DirectFieldBindingResult(photo, "photo");
boolean isSupport = validator.supports(Photo.class);
validator.validate(photo, errors);
List<ObjectError> allErrors = errors.getAllErrors();
assertTrue(isSupport);
assertEquals(1, allErrors.size());
assertEquals("Too long of name's length", allErrors.get(0).getCode());
}
}
Spring提供了一个工具类ValidationUtils,主要有这样几个方法,1.invokeValidator:执行Validator验证;2.rejectIfEmpty:执行空值验证;
3.rejectIfEmptyOrWhitespace:执行空值或空白字符串验证。