2011-08-26 97 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

謝謝你有很大的不同 –