【问题标题】:Custom Validator stopping spring internal validation自定义验证器停止 spring 内部验证
【发布时间】:2012-11-20 01:55:12
【问题描述】:

我创建了一个验证器来验证任何类的日期字段。我在我的控制器中自动装配了它的实例,并在我的控制器方法中调用了它的 validate()。一切正常。

@RequestMapping(value = "/{pan}",method=RequestMethod.POST)
public ModelAndView submitIfPANpresents(@ModelAttribute("command") @Valid  PortfolioBean portfolio,bindingResult result){
    dateValidator.validate(portfolio, result);
    if(result.hasErrors()){
        System.out.println(result.getErrorCount());
        return new ModelAndView("portfolioview");
    }
:
}

现在我在控制器中创建了一个方法来将自定义验证器与 WebDataBinder 绑定。我这样做是希望我不必显式调用 validate()。

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

仍然一切正常。

现在我评论了从控制器的方法调用自定义验证器的 validate() 并测试了代码。我只能看到自定义验证器设置的错误。 Spring 的内部验证停止工作。

我做错了什么或错过了什么?我的需要是,不要显式调用 validate() 并将 xml 中的验证器绑定为额外的验证器。

【问题讨论】:

  • 在某处我读到“JSR 303 内置注释在您注入自己的验证器时不会做任何事情”:( 任何解决方案?
  • 我可以使用 aspectJ 或其他方式吗?我希望它只通过一次配置自动运行。

标签: java spring-mvc


【解决方案1】:

当您执行 binder.setValidator(dateValidator); 时,您将 Spring 的验证器替换为您的 dateValidator。这就是 Spring 的内部验证停止工作的原因。

因此,如果您希望两个验证器都工作,您应该删除此行并保留dateValidator.validate(...)。如果你想拥有一个额外的验证器,你别无选择。

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多