相关疑难解决方法(0)

为什么我的Spring 3 Validator验证模型上的所有内容?

我有一个带有验证器的spring 3控制器,用于其中一种方法.它坚持验证模型上的每个对象.有人能够向我解释为什么会这样做或者我做错了什么?

根据文档,5.7.4.3配置一个JSR-303验证器供Spring MVC使用(http://static.springsource.org/spring/docs/3.0.0.RC3/spring-framework-reference/html/ch05s07. HTML)

使用JSR-303,单个javax.validation.Validator实例通常验证声明验证约束的所有模型对象.要使用Spring MVC配置支持JSR-303的Validator,只需将一个JSR-303 Provider(如Hibernate Validator)添加到类路径中.Spring MVC将检测它并自动启用所有控制器的JSR-303支持.

例:

@Controller
public class WhaleController {

        @Autowired
        private Validator myValidator;

        @Autowired
        private WhaleService whaleService;

        @InitBinder
        protected void initBinder(WebDataBinder binder) {
                binder.setValidator(this.myValidator);
        }

        @RequestMapping(value="/save-the-whales")
        @Transactional
        public void saveTheWhales(@Valid WhaleFormData formData, BindingResult errors, Model model) {
                if (!errors.hasFieldErrors()) {
                        Whale whale = new Whale();

                        whale.setBreed( formData.getBreed() );

                        this.whaleService.saveWhale( whale );

                        model.addAttribute("whale", whale);

                }
                model.addAttribute("errors", errors.getFieldErrors());
        }

}
Run Code Online (Sandbox Code Playgroud)

在运行时,它会抱怨Whale是myValidator的无效目标(设置为验证WhaleFormData,并且确实如此).鲸鱼是一种POJO,没有验证限制,注释和任何地方都没有配置.通过反复试验,我发现放置在模型上的任何对象都将尝试验证,如果验证器未设置为处理它,则会失败.基元很好.

任何人都可以告诉我为什么这样,请指出适当的文档和/或告诉我在没有验证的情况下将某些东西放在模型上的最佳方法?

在上面的例子中,我想在模型上放置"whale",因为它现在将具有从我的持久层接收的唯一whaleId().

谢谢!

validation spring spring-mvc

31
推荐指数
1
解决办法
9759
查看次数

使用initBinder添加多个验证器

我正在使用以下initBinder方法添加用户验证器:

@InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(new UserValidator());
    }
Run Code Online (Sandbox Code Playgroud)

这里是 UserValidator

public class UserValidator implements Validator {

    public boolean supports(Class clazz) {
        return User.class.equals(clazz);
    }

    public void validate(Object target, Errors errors) {
        User u = (User) target;

        // more code here
    }
}
Run Code Online (Sandbox Code Playgroud)

该validate方法是在控制器方法调用中得到正确调用.

@RequestMapping(value = "/makePayment", method = RequestMethod.POST)
public String saveUserInformation(@Valid User user, BindingResult result, Model model){

    // saving User here

    // Preparing CustomerPayment object for the payment page.
    CustomerPayment customerPayment = new …
Run Code Online (Sandbox Code Playgroud)

validation spring-mvc

30
推荐指数
4
解决办法
3万
查看次数

标签 统计

spring-mvc ×2

validation ×2

spring ×1