2011-08-26 80 views
5

我试图使用Spring验证来验证我的模型由Jackson转换器填充。 所以我有一个Java类,春季验证 - 以编程方式绑定到验证程序

class MyClass(){ 
    private String myString; 
} 

此类由杰克逊填充,我在我的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。请告知如何进一步处理。

回答

8

,您可以手动在代码中使用DataBinder的做到这一点:

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

但如果你已经有了春天-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! 
    } 
} 
+0

最终我把我所有的验证放在一个单独的类中,并直接从模型中调用。但提供的建议应该为任何面临相同问题 – Raghav

+0

谢谢你有很大的不同 –