数据校验模块在spring的指导手册中的第三个标题项。
先试验下给的例子:
校验器:
public class PersonValidator implements Validator { @Override public boolean supports(Class> clazz) { return clazz.equals(Person.class); } @Override public void validate(Object target, Errors errors) { Person person = (Person) target; if (person.getAge() > 12) { errors.rejectValue("age", "age >12"); } if (person.getName().length() < 5) { errors.rejectValue("name", "name length <5"); } } }
校验代码:
Person person = new Person(); person.setName("12"); person.setAge(23); PersonValidator validator = new PersonValidator(); BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); validator.validate(person, result); ListallErrors = result.getAllErrors(); for (ObjectError error : allErrors) { FieldError fieldError = (FieldError)error; System.out.println(fieldError.getField()+" " + fieldError.getCode()); }
逻辑就是通过PersonValidator的validate方法校验,如果有问题,就将错误封装在BeanPropertyBindingResult中,validate方法的第二个参数是一个Errors 类型,我这里选用了BeanPropertyBindingResult实现类;也可以用其他的;
数据校验是有个JSR标准的。熟悉是有hibernate-validator,如果想用这个怎么办呢?
首先引入第三方的实现(pom),容器中注入:CustomValidatorBean。
public void afterPropertiesSet() { if (this.validatorFactory == null) { //自动加载第三方实现 this.validatorFactory = Validation.buildDefaultValidatorFactory(); } ValidatorContext validatorContext = this.validatorFactory.usingContext(); MessageInterpolator targetInterpolator = this.messageInterpolator; if (targetInterpolator == null) { targetInterpolator = this.validatorFactory.getMessageInterpolator(); } validatorContext.messageInterpolator(new LocaleContextMessageInterpolator(targetInterpolator)); if (this.traversableResolver != null) { validatorContext.traversableResolver(this.traversableResolver); } setTargetValidator(validatorContext.getValidator()); }
校验时,注入这个bean,直接校验即可:
// 调用validatevalue方法。 Set> constraintViolations = validator.validatevalue(Person.class, "name", "tom"); for (ConstraintViolation cv : constraintViolations) { System.out.println(cv.getMessage()); }
第三方的实现不仅可以校验值,还可以校验返回值,方法参数等。调用对应的方法就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)