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:执行空值或空白字符串验证。