Spring Validator und Hibernate Validator kombinieren

Kombinieren Sie die Frühjahrsprüfung und die Ruhezustandsprüfung

In diesem Artikel zeigen wir Ihnen, wie Sie die übergebenen Formularwerte mit Spring Validator und Hibernate Validator validieren (Bean Validation).

Verwendete Technologien:

  1. Feder 4.1.6.FREIGABE

  2. Hibernate Validator 5.1.3.Final

1. Ruhezustand überprüfen

Der Hibernate-Validator wird ausgelöst, wenn@Valid angegeben wird.

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. Spring Validator

Wenn Sie den Spring-Validator über@InitBinder aktiviert haben, wird die Hibernate-Bean-Validierung ignoriert.

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

Hibernate- und Spring-Validator. Entfernen Sie die@InitBinder und starten Sie den Spring Validator manuell.

@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 {
            //...
        }

    }

Im obigen Beispiel wird das übermittelte "userForm" -Modell zuerst vom Ruhezustand-Validator und dann vom Frühjahrs-Validator validiert.

Related