个人学习参考所用,勿喷!
8.Bean的注解式校验
为了使用JSR-303的注解式校验,首先必须要修饰一个Bean:
public class Member { // JSR-303 validation annotations @NotNull @Size(min=2) private String name; @NotNull @Size(min = 9, max = 14) private String phone; @Pattern(regexp=".+@.+\\.[a-z]+") private String email; ... }
然后在控制器类中实施这些校验:
@Controller @RequestMapping("/member/*") @SessionAttributes("guests") public class MemberController { // JSR-303 validator private static Validator validator; private MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; // Initialize JSR-303 bean validation ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); validator = validatorFactory.getValidator(); } ... @RequestMapping(method = RequestMethod.POST) public String submitForm(@ModelAttribute("member") Member member, BindingResult result, Model model) { // Get JSR-303 errors ( See domain Member class for annotations validation) Set<ConstraintViolation<Member>> violations = validator.validate(member); for (ConstraintViolation<Member> violation : violations) { String propertyPath = violation.getPropertyPath().toString(); String message = violation.getMessage(); result.addError(new FieldError("member", propertyPath, "Invalid " + propertyPath + "(" + message + ")")); } if (!result.hasErrors()) { ... } else { ... } } }
在这里我们是手动的在构造器中完成了validator的初始化。其实也可以让Spring来注入,Spring的高级注入方式有工厂方式的注入。要使用上面的校验需要添加如下的jar支持:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.3.0.Beta1</version> <type>jar</type> <scope>compile</scope> </dependency>
参考:
juyon的blog:《spring3 MVC国际化支持之中文乱码》
Gary Mark等的书籍:《Spring Recipes》2ed