Combine Spring validator et Hibernate validator

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:

  1. Spring 4.1.6.RELEASE

  2. 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.

Related