http://yamei.blog.51cto.com/4382266/1111120
Spring Framework自带的validation的做法是,继承父类Validator,为每个FormBean绑定一个校验类。
- // 校验接口实现
- public class FeedbackValidator implements Validator {
- @Override
- public boolean supports(Class clazz) {
- return Feedback.class.equals(clazz);
- }
- @Override
- public void validate(Object obj, Errors e) {
- ValidationUtils.rejectIfEmpty(e, "question", "question.empty");
- ValidationUtils.rejectIfEmpty(e, "productId", "productId.empty");
- }
- }
在controller中
- @Controller
- public class StudentController {
- protected final Log logger = LogFactory.getLog(getClass());
- @InitBinder
- public void initBinder(WebDataBinder binder) {
- //添加一个日期类型编辑器,也就是需要日期类型的时候,怎么把字符串转化为日期类型
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- dateFormat.setLenient(false);
- binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
- //添加一个spring自带的validator
- binder.setValidator(new StudentValidator());
- }
- }
JSR-303是一个接口标准,它并不是Spring Framework 的一部分。
Hibernate Validator是JSR-303的一个实现。在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比。注解更加简洁、灵活。
注解说明
- Bean Validation 中内置的 constraint
- @Null 被注释的元素必须为 null
- @NotNull 被注释的元素必须不为 null
- @AssertTrue 被注释的元素必须为 true
- @AssertFalse 被注释的元素必须为 false
- @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
- @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
- @Past 被注释的元素必须是一个过去的日期
- @Future 被注释的元素必须是一个将来的日期
- @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
- Hibernate Validator 附加的 constraint
- @NotBlank(message =) 验证字符串非null,且长度必须大于0
- @Email 被注释的元素必须是电子邮箱地址
- @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
- @NotEmpty 被注释的字符串的必须非空
- @Range(min=,max=,message=) 被注释的元素必须在合适的范围内