Combinez le validateur Spring et le validateur Hibernate
Dans cet article, nous allons vous montrer comment valider les valeurs de formulaire soumises avec Spring validator et Hibernate Validator (validation de bean).
Technologies utilisées:
-
Spring 4.1.6.RELEASE
-
Hibernate Validator 5.1.3.Final
1. Hibernate Validator
Le validateur Hibernate sera déclenché si@Valid est fourni.
import org.hibernate.validator.constraints.NotEmpty;
public class User {
@NotEmpty
String name;
//...
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(
@ModelAttribute("userForm") @Valid User user,
BindingResult result, Model model) {
if (result.hasErrors()) {
//...
} else {
//...
}
}
2. Validateur de printemps
Si vous avez activé le validateur Spring via@InitBinder, la validation du bean Hibernate sera ignorée.
public class UserFormValidator implements Validator {
@Override
public boolean supports(Class> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
//validate something else
}
}
@Controller
public class UserController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserFormValidator());
}
3. Hibernate Validator + Spring Validator
Pour avoir à la fois Hibernate et Spring validator. Supprimez les@InitBinder et lancez manuellement le validateur Spring.
@Controller
public class UserController {
/*@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserFormValidator());
}*/
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(
@ModelAttribute("userForm") @Valid User user,
BindingResult result, Model model) {
//run Spring validator manually
new UserFormValidator().validate(user, result);
if (result.hasErrors()) {
//...
} else {
//...
}
}
Dans l'exemple ci-dessus, le modèle «userForm» soumis sera d'abord validé par le validateur Hibernate, puis suivi par le validateur Spring.