使用JSR-303和传统Bean验证?

C. *_*oss 10 spring spring-mvc bean-validation

是否可以在Spring中使用JSR-303 bean验证传统验证(该类型的单个验证器类)?如果是这样,设置它需要什么配置?

我已经尝试了参考的说明.

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

@RequestMapping(value="/dualEntry.htm", method = RequestMethod.POST)
public ModelAndView handlePost(@Valid DualEntryForm form, BindingResult result) {
    ModelAndView modelAndView = new ModelAndView("dualEntry", getCommonModel());

    if (!result.hasErrors()){
        //do logic
        return modelAndView;

    }else {
        modelAndView.addObject("dualEntryForm", form);
        return modelAndView;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用我的自定义Validator JSR-303验证,但不是两者.如果我在示例中使用initBinder,则使用自定义Validator.如果我删除它,则使用JSR-303 bean验证.我怎么能同时使用?

eol*_*ith 9

我按照这里的说明完成了这个:

http://blog.jteam.nl/2009/08/04/bean-validation-integrating-jsr-303-with-spring/

请参阅"享受两个世界"部分.不久,您明确地从Spring验证器运行JSR303验证,"加入"基于注释和自定义验证逻辑的JSR303验证结果.


jim*_*rds 8

我意识到这已经很老了,但是我的工作对我的代码的干扰最小

更改 binder.setValidator(new DualEntryValidator());

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

随着setValidator()您将JSR-303验证器替换为您的验证器.有了addValidator(),JSR-303验证器被调用,你的也是如此.

你需要确保你的验证程序不与你的JSR-303重叠@NotNull,@Min,@Max等注释,否则你会得到增加重复的错误消息.