同时绑定 spring validator和hibernate validator作为校验

一般情况下,配置hibernate validator,  就可以对参数进行一些基本的校验,但有时候,还需要更进一步的校验,自定义的校验,如果用spring mvc 的话,首先想到的是spring validator, 但有个问题,一旦你用了 @InitBinder 这个, hibernate validator 就会被忽略。

用hibernate 校验的一般方法是在 bean 上注解
程序代码 程序代码

import org.hibernate.validator.constraints.NotEmpty;

public class User {

    @NotEmpty
    String name;
    //...
}


在 spring mvc 中一般会这样使用.
程序代码 程序代码

@RequestMapping(value = "/users", method = RequestMethod.POST)
    public String saveOrUpdateUser(
        @ModelAttribute("userForm") @Valid User user,
        BindingResult result, Model model) {

        if (result.hasErrors()) {
            //...
        } else {
            //...
        }

    }


单纯的spring validaor 会这样使用 。
程序代码 程序代码

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());
     }


但如果非得这两种方法都同时使用的时候,怎么办呢,因为一旦用了spring validator 的 @InitBinder , hibernate  validator 会被忽略掉。 那么问题就出在 @InitBinder 身上,所以,我们只需要去掉这一部分就可以了。
程序代码 程序代码

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

    }


这样两种方法均兼顾到了。

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring hibernate validator
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.