【问题标题】:Spring Validation - Programmatically bind to a ValidatorSpring Validation - 以编程方式绑定到验证器
【发布时间】:2011-11-04 21:18:17
【问题描述】:

我正在尝试使用 Spring 验证来验证由 Jackson 转换器填充的模型。 所以我有一个java类,

class MyClass(){
    private String myString;
}

这个类由 Jackson 填充,我的 Java 代码中有这个实例。 还定义了一个验证器类,例如,

class MyValidator implements Validator {
    public boolean supports(Class<?> clazz) {
        return MyClass.class.equals(clazz);
    }   
    public void validate(Object object, Errors errors) {
           //Validation logic here
    }
}

现在我想做的是将对象发送到验证器并获取错误对象,检查并继续进行。但是,对于调用

validate(Object object,Errors errors) 

我需要一个我没有的错误实例。我不能使用BindingResultErrors。请告知如何进一步进行。

【问题讨论】:

    标签: java validation spring-mvc jackson


    【解决方案1】:

    您可以使用 DataBinder 在代码中手动执行此操作:

    MyClass toValidate = new MyClass();
    DataBinder binder = new DataBinder(toValidate);
    binder.setValidator(new MyValidator());
    binder.validate();
    if (binder.getBindingResult().hasErrors()) {
        // oh noes!
    }
    

    虽然如果你在 spring-mvc 的 @Controller 中定义了一个 @ModelAttribute,这样的东西应该可以工作(放置在相关的 @Controller 中):

    @ModelAttribute("myclass")
    public MyClass myClass() {
        return new MyClass();
    }
    
    @InitBinder("myclass")
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(new MyValidator());
    }
    
    @RequestMapping(value = "/do/something", method = POST)
    public ModelAndView validatedRequest(@Valid @ModelAttribute("myclass") MyClass profile,
                                         BindingResult result) {
        if (result.hasErrors()) {
            // oh noes!
        }
    }
    

    【讨论】:

    • 最终我把所有的验证放在一个单独的类中,并直接从模型中调用。但所提供的建议应该适用于面临同样问题的任何人
    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多